@Configuration 클래스에 @Bean으로 명시적으로 등록하지 않고 애너테이션을 통해 등록하기
스프링이 Bean을 검색해 자동으로 등록해준다
스테레오 타입 애너테이션을 이용해 스캔 대상을 지정해줄 수 있다
스테레오 타입 : UML에서 <<Inteface>>처럼 특성 요소를 상황이나 도메인에 맞게 분류해주는 것
// 기존 설정 클래스
@Configuration
public class AppConfiguration {
@Bean
public SomeRepository someRepo() {
...
}
@Bean
public OtherRepository otherRepo() {
...
}
}
// 컴포넌트 스캔을 적용한 설정 클래스
@Configuration
@ComponentScan
public class AppConfiguration {
}
// SomeRepository.java
@Repository
public class SomeRepository implements Repository {
...
}
// OtherRepository.java
@Repository
public class OtherRepository implements Repository {
...
}
@ComponentScan만 사용하면 모든 컴포넌트를 스캔하기 때문에 설정해줘야한다
@ComponentScan(basePackages = {"org.group.package.sub1", "org.group.package.sub2"})
// sub1에 있는 Some 클래스와 sub2에 있는 Other 클래스
@ComponentScan(basePackageClasses = {Some.class, Other.class}
@ComponentScan(
basePackages = {"org.group.package.sub1"},
excludeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = Some.class)}
)
@ComponentScan(
basePackages = {"org.group.package.sub2"},
includeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = Some.class)}
)