컴포넌트 스캔방식으로 동작하여 빈을 IoC 컨테이너에
차곡차곡 쌓아두는건 알고 있었지만
Spring Boot 에서 컴포넌트 스캔을 직접 설정해본적이 없다.
그래서 Spring 은 @Component 라는 어노테이션이 있으면
내부적으로 자동처리해주는 줄 알았다.
하지만 그렇지 않다.
Spring Boot 에서의 컴포넌트 스캔
Boot 에서는 @SpringBootApplication 이라는 어노테이션이 달린
내장톰캣을 실행하는 main 메서드를 담고 있는 클래스가 있는데
@SpringBootApplication 의 구현코드를 보면
@ComponentScan 을 달고 있는 것이 보인다.
그래서 Boot 는 자동적으로 컴포넌트 스캔을 진행해 왔던 것이다.
Spring Framework 에서 컴포넌트 스캔
@SpringBootApplication 에서 @ComponentScan 이 걸려있는 것처럼
설정관련 자바파일을 만들어서(예시_ RootContextConfig.java) 설정을 해줘도 되고
xml 파일에서 설정을 해주어도 된다.
참고로 @Configuration 은 XML을 대체하는 파일임을 알려준다.
Java 파일로 컴포넌트 설정 예시
이건 좀 복잡하다.
web.xml, dispatch-servlet.xml, application.xml 등이 유기적으로 엮여있기 때문에
@ComponentScan 하나만 설정한다고 되는게 아니긴 하다.
이에 대한 포스팅은 추후에 다시 올리겠다.
사진에서 보이는 것 처럼 RootAppContext, ServeltAppContext, SpringConfigClass 파일들이
web.xml, dispatch-servlet.xml, application.xml 를 대체하고 있다.
@ComponentScan 이 달린 ServletAppContext.java 파일이 컴포넌트 스캔을 담당하고 있다.
@ComponentScan
basePakcages
패키지경로를 직접 적어주어야 한다.
@Configuration
@ComponentScan(basePackages="com.example")
public class AppConfig(){}
basePakageClasses
해당 Class 가 위치한 곳에서 부터
하위레벨 패키지를 모두 스캔한다. (TypeSafe)
@Configuration
@ComponentScan(basePackageClasses=AppConfig.class)
public class AppConfig(){}
XML 파일로 컴포넌트 설정 예시