티스토리 뷰

@ComponantScan은 @Componant가 붙은 모든 클래스를 스프링 빈으로 등록한다.

 

아래처럼 @ComponantScan을 붙이면,

로그를 통해 빈으로 등록되는 것을 확인할 수 있다.

이렇게 따로 클래스를 만들어 모아두지 않고 컴포넌트 스캔을 이용해 자동으로 하는 건 알겠는데,

그럼 의존관계 주입은 어떻게?

@AutoWired 사용!

 

생성자에 @AutoWired를 지정하면 스프링 컨테이너가 자동으로 해당 되는 빈을 찾아서 주입한다.
이때 기본적으로 조회하는 방식은 타입이 같은 빈을 찾는 것이다.

(위 이미지에서는 memberRepository와 같은 타입을 찾겠지!)

(타입이 중복되거나 하는 경우의 처리는 @AutoWired 게시글에서!)

 

그럼 탐색 위치는 어떻게?

basePackages 옵션으로 탐색할 패키지의 시작 위치를 지정할 수 있다.

해당되는 패키지를 포함해서 하위 패키지를 모두 탐색한다.

그럼 basePackages가 없으면?

@ComponantScan이 붙은 설정정보 클래스의 패키지가 시작 위치!

 

다만 권장하는 방법은

프로젝트 시작 루트에 AppConfig같은 설정 정보를 두고, @ComponantScan을 붙인 다음 basePackages는 생략하는 것이라고 한다.

 

참고로 스프링 부트를 이용한다면 대표 시작정보인 @SpringBootApplication을 시작 루트 위치에 두는 것이 관례이다.

(@SpringBootApplication을 열어보면 @ComponantScan이 들어있다. 즉, 스프링부트를 쓰면 굳이 @ComponantScan을 쓸 필요가 없다)

댓글