해당 포스팅에서는 @ComponentScan, @Autowired에 대해서 정리해 보고자 한다.
컴포넌트 스캔을 사용하려면 먼저 @ComponentScan을 설정 정보에 붙여주면 된다.
컴포넌트 스캔은 @Component 애노테이션이 붙은 클래스들을 자동으로 스프링 빈으로 등록한다.
이 때 스프링 빈의 이름은 클래스명의 맨 앞글자만 소문자로 변경해서 클래스명을 그대로 사용한다. (ex: OrderService -> orderService)
만약, 이름을 직접 지정하고 싶다면 @Component("myOrderService")와 같이 직접 설정할 수도 있다.
@Configuration
@ComponentScan
public class AppConfig {
}
@ComponentScan을 사용하면 @Configuration이 붙은 설정 정보들이 모두 자동으로 등록 되기 때문에, 이런 경우 excludeFilters를 이용해서 불필요한 설정 정보는 컴포넌트 스캔 대상에서 제외해 줘야 한다.
@ComponentScan(includeFilters = @Filter(type = FilterType.ANNOTATION, classes = MyIncludeComponent.class),
excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = MyExcludeComponent.class))
static class ComponentFilterAppConfig {
}
생성자에 @Autowired 어노테이션을 지정하면, 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아서 주입해준다. 생성자에서 여러 의존관계가 존재하더라도 한번에 모두 주입받을 수 있다.