[Spring - Inflearn] Component & ComponentScan & 의존관계 주입

728x90
반응형
SMALL

@ComponentScan

 
@Configuration
@ComponentScan(
    basePackages = "hello.core",
    excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class)
)
public class AutoAppConfig {

}

컴포넌트 스캔은 @Component 어노테이션이 붙은 클래스를 스캔해서 스프링 빈으로 등록해준다.

 

@Configuration, @Controller, @Service, @Repository 등이 대상이 되는 이유는 각 어노테이션 내부로 들어가면 @Component가 선언되어 있기 때문이다.

 

basePackages 속성으로 탐색할 패키지 시작 위치를 지정할 수 있다. 하지만 생략하여 디폴트를 쓰는게 추세이다.

 

탐색할 패키지 디폴트 시작 위치 : @ComponentScan 이 붙은 클래스의 패키지 => 일반적으로 최 상단 패키지에 Config 파일이 존재한다.

 

  • excludeFilters 속성으로 탐색에서 제외시킬 수 있다. 잘 사용하지는 않는다.

 

includeFilters 속성도 존재, 사용은 ,, 알아만 두자.

 

※ 스프링 빈 저장소는 스프링 빈이 등록되기 전에 필요한 의존관계 그래프를 내부적으로 미리 만든다.

예를 들어 A 클래스에서 B 클래스의 의존성을 주입해주는 구조일 때 아래와 같은 순서로 동작한다.

그래서 A 클래스를 빈으로 등록하려 할 때 B 클래스가 없으면, 먼저 B 클래스를 빈으로 등록하고 A 클래스에 주입하여 A 클래스 빈을 등록한다.

 

 

ClassPathBeanDefinitionScanner - Identified candidate component class: fole [~]

 

Autowiring by type from bean name ~

 

728x90
반응형
LIST