스프링 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
https://thenicesj.tistory.com/584
'IT > Java' 카테고리의 다른 글
[error] no qualifying bean of type available: expected at least 1 bean which qualifies as autowire candidate (41) | 2023.08.18 |
---|---|
spring-boot-starter-web <dependency추가> (50) | 2023.08.17 |
[Lombok] @Builder 사용 시 @NoArgsConstructor 에러 (52) | 2023.08.15 |
Java Lombok 이란. (65) | 2023.08.14 |
ResponseEntity란 (51) | 2023.08.13 |
댓글