@Bean 혹은 XML파일에 으로 빈을 일일이 등록하는 것도 현업에서는 수십, 수백개가 되기 때문에 누락 할 우려가 있음. 반복하는 것도 싫고!
스프링은 설정정보가 없어도 자동으로 스프링빈을 등록하는 @Component 스캔이라는 기능을 제공함.
@ComponentScan을 붙여주면 된다.
그런데 이렇게 하면 이전에 만든 AppConfig와 TestConfig도 @Configuration의 일환으로 bean으로 등록되기 때문에
@ComponentScan(
excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class)
)
을 사용하여 제외해준다.
@Composition을 클래스 위에 붙여주면 된다.
탐색 시작 위치 지정 // 이걸 해주지 않으면 라이브러리까지 다 뒤져서 정말 오래걸린다.
-> 설정정보 클래스의 위치를 프로젝트 최상단에 두어서, default로 해당 프로젝트 모든 파일을 뒤지도록 하는게 요즘의 관례이다.
@ComponentScan(
basePackages = "hello11.core.member",
excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class)
)
컴포넌트 스캔 기본 대상
@Component : 컴포넌트 스캔에서 사용
@Controlller : 스프링 MVC 컨트롤러에서 사용
@Service : 스프링 비즈니스 로직에서 사용
@Repository : 스프링 데이터 접근 계층에서 사용
@Configuration : 스프링 설정 정보에서 사용
예를 들어서 @Controller의 경우 들어가면 @Component가 붙어있다.
includeFilter와 excludeFilter를 통해서 뭘 탐색하고 뭘 탐색하지 않을 지 조절할 수 있다.
@Configuration
@ComponentScan(
includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = MyIncludeComponent.class),
excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = MyExcludeComponent.class)
)
static class ComponentFilterAppConfig {
}