상세 컨텐츠

본문 제목

[Spring] component-scan 사용이유

Spring/개념

by Chan.94 2021. 10. 5. 13:26

본문

반응형

component-scan이란?

빈(Bean)으로 등록될 준비가 된 클래스들을 스캔하여 빈(Bean)으로 등록해준다.

 

빈(Bean)으로 등록될 준비가 된 클래스들이란?

@Component, @Controller, @Service, @Repository 어노테이션을 붙인 클래스를 말한다.

 


사용법

XML

<context:component-scan base-package="com.DevLog" />

XML 파일에 위와 같이 설정하게 되면 base-package 하위의 @Component, @Controller, @Service, @Repository 어노테이션이 있는 클래스가 빈(Bean)으로 등록된다.

 

  • exclude-filter
<context:component-scan base-package="com.DevLog">
    <context:exclude-filter type="annotation" 
        expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

스캔에서 @Controller를 제외하고 싶다면 exclude-filter를 사용하면된다.


  • include-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를 이용하여 특정 어노테이션만을 스캔할 수 있다.


component-scan은 왜 설정할까?

프로젝트를 진행할 때 패키지에는 @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 > 개념' 카테고리의 다른 글

Spring AOP (Proxy)  (0) 2021.10.08
@Autowired 인터페이스 사용이유  (0) 2021.10.07
@Autowired 사용법  (0) 2021.10.06
DI(의존성 주입)  (0) 2021.10.03
DispatcherServlet  (2) 2021.09.23

관련글 더보기

댓글 영역

>