빈(Bean)으로 등록될 준비가 된 클래스들을 스캔하여 빈(Bean)으로 등록해준다.
빈(Bean)으로 등록될 준비가 된 클래스들이란?
@Component, @Controller, @Service, @Repository 어노테이션을 붙인 클래스를 말한다.
XML
<context:component-scan base-package="com.DevLog" />
XML 파일에 위와 같이 설정하게 되면 base-package 하위의 @Component, @Controller, @Service, @Repository 어노테이션이 있는 클래스가 빈(Bean)으로 등록된다.
<context:component-scan base-package="com.DevLog">
<context:exclude-filter type="annotation"
expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
스캔에서 @Controller를 제외하고 싶다면 exclude-filter를 사용하면된다.
<context:component-scan base-package="com.DevLog" use-default="false">
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
use-default는 선언하지 않는다면 기본적으로 true이다. true일 경우 @Component, @Controller, @Service, @Repository의 모든 어노테이션을 스캔하겠다는 뜻이다.
include-filter를 이용하여 특정 어노테이션만을 스캔할 수 있다.
프로젝트를 진행할 때 패키지에는 @Controller, @Service, @Repository 등의 어노테이션을 사용하는 클래스 외에 파일 업로드 클래스, 날짜를 계산해주는 클래스, 메일 전송 클래스 등의 다양한 비지니스 클래스들이 존재한다.
패키지의 경로가 아래와 같다고 생각해보자
com.DevLog
-Controller
-Service
-Repository
-Util
-FileUpload
-Smtp
Controller, Service, Repository에는 각각의 어노테이션을 사용하는 클래스들이 있고 Util, FileUpload, Smtp에는 비지니스를 제공하는 클래스들이 있다.
Util, FileUpload, Smtp하위 클래스들은 빈(Bean)에 등록할 이유가 없기에 스캔을 할 이유가 없다.
프로젝트 규모가 커질수록 위와 같은 클래스들은 많이 질 것이다.
따라서, 스캔 범위를 지정해 주면 불필요한 스캔을 줄일 수 있다.
Spring Boot 에서는 @SpringBootApplication 안에 @ComponectScan이 포함되어있다.
@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 {
...
}
Spring AOP (Proxy) - Logging 적용 (0) | 2021.10.08 |
---|---|
@Autowired 인터페이스 사용이유 (0) | 2021.10.07 |
@Autowired 사용법 (0) | 2021.10.06 |
DI(의존성 주입) (0) | 2021.10.03 |
DispatcherServlet (2) | 2021.09.23 |
댓글 영역