본문 바로가기
IT/Java

@ComponentScan이란 무엇인가?

by 성준하이 2023. 8. 16.
반응형

스프링 Bean에 대해서 이전 포스팅에서 다룬 적이 있다.

자세한 내용은 아래 참고 포스팅을 참고 바란다.

 

스프링부트는 실행되는 메인 메서드 위에 

@SpringBootApplication 를 달고 있고 그 안을 들어가면 

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {

이렇게 SpringBootApplication의 어노테이션이 시작된다.

 

여기서 아래 참고 포스팅에 custom annotation 만들기에서 사용했던 annotation들도 보인다.

 

하지만 오늘의 주인공은 그것들이 아닌 

@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })

이부분이다.

 

ComponentScan annotation에 나열된 패키지나 클래스 등에서 Spring Bean 등록 대상인 것들만 찾아서 Bean에 넣어준다.

 

ComponentScan 속성들을 정리하면 아래와같다.

속성 설명 예문
basePackages 사용될 패키지 위치 basePackages = "org.example"
basePackages = {"com.example.component","com.example.component2"}
basePackageClasses 사용될 클래스 들 basePackageClasses = A.class
basePackageClasses = {A.class,B.class}
includeFilters 포함시킬 필터 includeFilters = @Filter(type = FilterType.REGEX, pattern = ".*Stub.*Repository")
excludeFilters 포함 안시킬 필터 excludeFilters = @Filter(Repository.class)
excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Ignore.class)

ComponentScan.Filter 에는 아래의 다섯 가지 유형이 있다.

  • ANNOTATION : 주어진 어노테이션이 명시된 컴포넌트를 필터
  • ASSIGNABLE_TYPE : 주어진 타입을 필터( 주어진 타입을 상속 또는 구현한 타입도 필터 )
  • ASPECTJ : AspectJ 패턴을 사용하여 필터
  • REGEX : 정규식을 이용한 필터
  • CUSTOM : 직접 만든 필터를 이용한 필터

 

그리고 스프링부트에서 SpringBootApplication에 바로 사용하고 싶다면

 

@SpringBootApplication(scanBasePackages = {"com.test.aa","com.test.ss"})

이런식으로 사용이 가능하다.

사용되는 속성명은 다를수 있으니 확인하고 사용하면 되겠다.


참고 포스팅

https://thenicesj.tistory.com/320

 

Spring Bean 등록

이전 포스팅에서 스프링에서 DI 와 IoC를 사용하기 위해서는 스프링에 Bean을 등록해줘야하고 그에 대한 내용은 아래 참고포스팅에서 알아볼수 있다. 하지만 스프링을 다루기 위해서는 가장 중요

thenicesj.tistory.com

https://thenicesj.tistory.com/584

 

custom annotation 활용

요즘 자바에선, 스프링에선 annotation에 대해서 많이 사용이 되고 없이는 개발이 많이 불편한 시대가 되어버렸다. 이전 포스팅에서 annotation에 대해서 많이 다뤘으니 참고를 하는것도 도움이 될것

thenicesj.tistory.com

 

반응형

댓글