본문 바로가기
Spring

Component

by 스르나 2020. 5. 11.

ComponentScan의 주요 기능

 

  • 스캔 위치 설정
  • 필터링(어떤 Annotation을 스캔하지 않을지)

ComponentScan은 안에 문자열로 스캔 위치를 지정할 수 있다.

ComponentScan(basePackages), ComponentScan(basePackageClasses) 이렇게 2가지 방식이 있는데
ComponentScan(basePackages)는 특정 패키지안에서 @Component를 찾아서 Spring Bean으로 등록한다.
Compnent(basePackageClasses)는 특정 클래스를 지정하고 그 클래스의 위치로 부터 하위 패키지까지 모두 스캔해서 @Compnent를 찾아 Spring Bean으로 등록한다.

위 두가지 방식에서의 중요한 차이점이 하나 더 있는데 basePackages는 type safe하지 않고 basePackageClasses는 type safe하다. 여기서 type safe는 다형성 때문에 런타임 에러가 나는 경우를 의미한다.

CompnentScan vs Bean

ComponentScan이 무조건 좋은것만은 아니다. ComponentScan의 동작 방식은 BeanFactoryPostProcessor라는 Interface를 구현한 ConfigurationClassPostPorcessor가 스캐닝을 해서 Spring Bean으로 등록을하는데 이때 @Bean으로 우리가 @Compnent를 사용하지 않고 직접 Spring Bean으로 등록한것은 제외하고 등록한다. 그런데 이런 스캐닝은 스캐닝 대상이 되는 @Component들이 많을 경우 Application의 구동 시 스캐닝할 대상이 많아서 속도가 저하 된다. 반대로 @Bean으로 등록하는 방식은 스캐닝 방식이 아니라서 구동식 속도가 비교적 빠르다.
하지만 말그대로 구동시 속도이기 때문에 구동된 이후에는 속도 차이가 없고 @Bean으로 일일이 등록하는 것은 매우 힘들다.

'Spring' 카테고리의 다른 글

스프링 HttpMessageConverters  (0) 2021.01.27
Autowired  (0) 2020.05.11
Environment  (0) 2020.05.11
Scope  (0) 2020.05.11
IOC 컨테이너  (0) 2020.05.11