티스토리 뷰
컴포넌트 스캔이란?
-스프링이 직접 클래스를 검색해서 빈으로 등록해주는 기능입니다. 직접 수동으로 빈을 등록하지않아도, 코드에 컴포넌트라고 표시만 해주면 스프링이 컴포넌트로 지정된 부분을 찾아서 자동으로 빈으로 등록을 해주는 기능입니다.
컴포넌트 스캔 과정
- 스캔 대상 패키지 지정
- 컴포넌트 스캔을 수행할 패키지를 지정하여 스프링이 스캔을 해야하는 패키지를 지정합니다.
@ComponentScan 애노테이션을 통해 스캔 대상 패키지를 지정할 수 있습니다. - 클래스 탐색
-지정된 패키지 내부에 있는 클래스들을 탐색합니다. 전체 클래스를 탐색하며, 컴포넌트로 지정된 클래스들만 찾아서 스캔합니다. - 어노테이션 탐색
-클래스들을 스캔하면서 컴포넌트만 찾기위해 @Component 어노테이션을 찾습니다. 해당 어노테이션은 사용자가 컴포넌트로 지정을 한것이므로, 컴포넌트 스캔 대상이 됩니다.
(이때, @Configuration ,@Controller ,@Service ,@Repository 등의 어노테이션도 컴포넌트 스캔 대상이 됩니다.) - 빈 등록
-스캔된 클래스들은 스프링 컨테이너에 빈으로 등록됩니다. 이때 빈으로 저장될때 빈의 이름은 보통은 컴포넌트 설정된 클래스의 첫문자를 소문자로 변환한 이름입니다. 또한 사용자가 직접 이름을 지정하여 빈으로 등록할 수 도 있습니다.
컴포넌트 스캔 방법
- @ComponentScan
@Configuration
@ComponentScan(basePackages = "com.example.myapp")
public class MyConfiguration {
@Bean
public MyBean myBean() {
return new MyBean();
}
}
@ComponentScan은 스프링에서 컴포넌트 스캔을 수행하기 위해 사용되는 어노테이션으로 , 해당 어노테이션으로 지정된 패키지에서 @Component 어노테이션이 부여된 클래스들을 스캔하여 자동으로 빈으로 등록하는 기술입니다.
다만, 스프링 부트에선 @ComponentScan이 자동으로 구현이 되어있어 따로 @ComponentScan을 안해도 자동으로 @Component를 찾아줍니다.
(스프링 부트에서 @ComponentScan을 구현하고 싶으시면 main에 있는 @SpringBootApplication에 추가구현을 하셔야합니다.)
컴포넌트 스캔 옵션
- 단일 패키지 스캔
@ComponentScan(basePackages = "com.example.package")
- 여러 패키지 스캔
@ComponentScan(basePackages = {"com.example.package1", "com.example.package2"})
- 기본 패키지 자동 감지
@ComponentScan
- 스캔 제외
@ComponentScan(
basePackages = "com.example.package",
excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = MyExcludeAnnotation.class),
)
- 스캔 포함
@ComponentScan(
basePackages = "com.example.package",
includeFilters = @ComponentScan.Filter(type = FilterType.REGEX, pattern = "com.example.package2"),
)
'자바 > 스프링' 카테고리의 다른 글
@Autowired 자동주입 (0) | 2023.06.26 |
---|---|
빈(Bean) 등록 심화 (0) | 2023.06.26 |
WAS(Web Application Server) , DispatcherServlet (0) | 2023.06.24 |
스프링 Controller, Repositroy, Service (0) | 2023.05.30 |
빈(Bean)등록 (컴포넌트,빈) (0) | 2023.05.30 |