@Configuration
@ComponentScan(
excludeFilters = @ComponentScan.Filter(
type = FilterType.ANNOTATION,
classes = Configuration.class))
public class AutoAppConfig {
...
}
컴포넌트 스캔을 사용하려면 @ComponentScan을
설정 정보에 붙여주면 된다.
참고: 컴포넌트 스캔을 사용하면 @Configuration 이 붙은 설정 정보도 자동으로 등록되기 때문에, AppConfig, TestConfig 등 앞서 만들어두었던 설정 정보도 함께 등록되고, 실행되어 버린다. 그래서 excludeFilters 를 이용해서 설정정보는 컴포넌트 스캔 대상에서 제외했다. 보통 설정 정보를 컴포넌트 스캔 대상에서 제외하지는 않지만, 기존 예제 코드를 최대한 남기고 유지하기 위해서 이 방법을 선택했다.
컴포넌트 스캔은 이름 그대로 @Component
애노테이션이 붙은 클래스를 스캔해서 스프링 빈으로 등록한다.
참고: @Configuration 이 컴포넌트 스캔의 대상이 된 이유도 @Configuration 소스코드를 열어보면 @Component 애노테이션이 붙어있기 때문이다.
@ComponentScan
은 @Component
가 붙은 모든 클래스를 스프링 빈으로 등록모든 자바 클래스를 다 컴포넌트 스캔하면 시간이 오래 걸린다. 그래서 꼭 필요한 위치부터 탐색하도록 시작 위치를 지정할 수 있다.
@ComponentScan( basePackages = "com.example.demo")
basePackages = {"com.example.demo", "com.example.service"}
basePackageClasses
: 지정한 클래스의 패키지를 탐색 시작 위치로 지정한다.설정 정보 클래스의 위치를 프로젝트 최상단에 두는 것이다. 최근 스프링 부트도 이 방법을 기본으로 제공한다.
@Autowired
를 지정하면, 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아서 주입한다.