IoC Container는 @Configuration, @Bean, @Component, @Repository, @Service, @Controller가 달린 클래스를 감지하며 빈을 가져오기 위해 스캐닝을 한다.
@Bean | @Component | |
---|---|---|
선언 레벨 | Method Level | Class Level (Interface, enum) |
사용 용도 | 개발자가 컨트롤이 불가능한 외부 라이브러리 | 개발자가 컨트롤이 가능한 Class |
ComponentScan은 @SpringBootApplication 어노테이션을 열어서 보면 상단에 걸려있다. 즉, 메인 메소드의 패키지부터 스캔한다.
스캔되는 범위는 @ComponentScan이 명시된 클래스가 위치한 디렉토리를 포함해서 그 하위 디렉토리들이다. (basePackages나 basePackagesClasses 옵션 값으로 변경가능)
- 컴포넌트 스캔 대상
- @Component (컴포넌트 스캔에 사용)
- @Controller (스프링 MVC Controller에서 사용)
- @Service (스프링 비즈니스 로직에서 사용)
- @Repository (스프링 데이터 접근계층에서 사용)
- @Configuration (스프링 설정 정보에서 사용)