이 영역을 누르면 첫 페이지로 이동
Puter의 잡동사니 블로그의 첫 페이지로 이동

Puter의 잡동사니

페이지 맨 위로 올라가기

Puter의 잡동사니

잡다한 것이 한데 뒤섞인 곳

UnsatisfiedDependency

  • 2022.09.15 11:29
  • development
반응형
expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
발생 시 해결 방법

 


 

[Error 로그]

Parameter 2 of constructor in us.puter.park.api.MenuController required a bean of type 'us.puter.park.common.security.auth.UrlFilterInvocationSecurityMetadataSource' that could not be found.

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: 
Error creating bean with name 'menuController' defined in file [D:\workspace\park\build\classes\java\main\us\puter\park\api\MenuController.class]: 
Unsatisfied dependency expressed through constructor parameter 2; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: 
No qualifying bean of type 'us.puter.park.common.security.auth.UrlFilterInvocationSecurityMetadataSource' available: 
expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: 
No qualifying bean of type 'us.puter.park.common.security.auth.UrlFilterInvocationSecurityMetadataSource' available: 
expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}

 


 

[현황]

 

1. 아래 코드에서 `UrlFilterInvocationSecurityMetadataSource`을 주입함

@RestController
@RequestMapping("/api/common/menu")
@RequiredArgsConstructor
public class MenuController {
    private final MenuService menuService;
    private final AuthService authService;
    private final UrlFilterInvocationSecurityMetadataSource urlFilterInvocationSecurityMetadataSource;
	...
}

 

2. `UrlFilterInvocationSecurityMetadataSource`은 `FilterInvocationSecurityMetadataSource` 상속 받으며, 어노테이션을 통한 주입을 하지 않음

public class UrlFilterInvocationSecurityMetadataSource implements FilterInvocationSecurityMetadataSource {
    private final LinkedHashMap<RequestMatcher, List<ConfigAttribute>> requestMap;
    private final AuthService authService;

    public UrlFilterInvocationSecurityMetadataSource(LinkedHashMap<RequestMatcher, List<ConfigAttribute>> requestMap,
                                                     AuthService authService) {
        this.requestMap = requestMap;
        this.authService = authService;
    }
    ...
}

 

3. `SecurityConfig`에서 `@Bean`을 통하여 주입함
> 문제는 `FilterInvocationSecurityMetadataSource` 자료형으로 주입함
@Bean
public FilterInvocationSecurityMetadataSource urlFilterInvocationSecurityMetadataSource() throws Exception {
    return new UrlFilterInvocationSecurityMetadataSource(urlResourcesMapFactoryBean().getObject(), authService);
}

private UrlResourcesMapFactoryBean urlResourcesMapFactoryBean() {
    UrlResourcesMapFactoryBean urlResourcesMapFactoryBean = new UrlResourcesMapFactoryBean();
    urlResourcesMapFactoryBean.setAuthService(authService);
    return urlResourcesMapFactoryBean;
}

 


 

[해결]

`@Bean` 설정의 자료형을 `UrlFilterInvocationSecurityMetadataSource`로 변경

@Bean
public FilterInvocationSecurityMetadataSource urlFilterInvocationSecurityMetadataSource() throws Exception {
    return new UrlFilterInvocationSecurityMetadataSource(urlResourcesMapFactoryBean().getObject(), authService);
}

▼▼▼▼▼▼▼▼▼▼

@Bean
public UrlFilterInvocationSecurityMetadataSource urlFilterInvocationSecurityMetadataSource() throws Exception {
    return new UrlFilterInvocationSecurityMetadataSource(urlResourcesMapFactoryBean().getObject(), authService);
}

 


 

  • 해당 오류는 `@Autowired`로 선언된 객체인 `UrlFilterInvocationSecurityMetadataSource` 타입의 빈으로 생성된 객체가 하나도 존재하지 않아 발생함
  • `@Bean`, `@Component`, `@Service`과 같은 어노테이션을 선언해서 해당 객체가 빈으로 생성되도록 하거나 스프링에서 지원하는 빈생성 클래스인 `FactoryBean`을 사용해서 빈으로 생성하는 로직을 구현해야 함
  • 즉, `@Autowired`된 빈을 찾고 있는데 해당 객체가 빈으로 생성되도록 선언된 구문이 없기 때문에 발생하는 오류

 

 

반응형
저작자표시 비영리 동일조건 (새창열림)

'development' 카테고리의 다른 글

PKIX path building failed  (0) 2023.05.01
centos8에서 mariadb 설치 rpm 문제  (0) 2023.05.01
WebSocket @Autowired  (0) 2022.09.14
lombok annotation  (0) 2022.09.12
spring boot transaction  (0) 2022.09.08

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • PKIX path building failed

    PKIX path building failed

    2023.05.01
  • centos8에서 mariadb 설치 rpm 문제

    centos8에서 mariadb 설치 rpm 문제

    2023.05.01
  • WebSocket @Autowired

    WebSocket @Autowired

    2022.09.14
  • lombok annotation

    lombok annotation

    2022.09.12
다른 글 더 둘러보기

정보

Puter의 잡동사니 블로그의 첫 페이지로 이동

Puter의 잡동사니

  • Puter의 잡동사니의 첫 페이지로 이동

검색

메뉴

  • ALL
  • #TAG

카테고리

  • Puter의 잡동사니 (164)
    • creation (5)
    • tagging (42)
    • product (63)
    • toy (18)
    • game (2)
    • clothes (4)
    • useful (3)
    • development (27)
반응형

정보

Puter의 Puter의 잡동사니

Puter의 잡동사니

Puter

블로그 구독하기

  • 구독하기
  • 네이버 이웃 맺기
  • RSS 피드

나의 외부 링크

  • kakao pay
  • 구글 Search Console
  • 구글 Analytics
  • 네이버 웹마스터 도구
  • 네이버 Analytics

방문자

  • 전체 방문자
  • 오늘
  • 어제
Powered by Tistory / Kakao. Copyright © Puter.

티스토리툴바