<context:component-scan> 태그, <context:include-filter> & <context:exclude-filter>

CODEDRAGON Development/Spring

반응형


 

 

<context:component-scan> 태그

·         Component Scan 지원하는 태그입니다.

·         Bean 있는 모든 Component들을 자동으로 찾아 Bean Container 등록합니다.

·         , 의존성 관계 등록은 따로 하지 않습니다.

·         특정 패키지 안의 클래스들을 스캔하고, Annotation 확인 bean 인스턴스를 생성합니다. @Component @Controller @Service @Repository 등의 Bean 등록 Annotation 존재해야 bean 스캔한 생성할 있습니다

·         @Autowired @Qualifier Annotation 인식할 있습니다.

·         @Component 통해 자동으로 Bean 등록하고, @Autowired 의존관계를 주입 받는 어노테이션을 클래스에서 선언하여 사용했을 경우에는 해당 클래스가 위치한 특정 패키지를 Scan하기 위한 설정(<context:component-scan> 태그) 스프링 설정 XML 해주어야 합니다.

·         component-scan 선언했다면 context:annotation-config 선언할 필요가 없습니다.

·         component-scan 수동  DI(setter, contructor) 혼용해서 사용할 있습니다.

 

 

패키지명 이후의 하위 패키지를 검색해 @Component 어노테이션을 포함하는 모든 클래스를 Bean으로 자동 등록해 줍니다.

<context:component-scan base-package="packagename" />

<context:component-scan base-package="codedragon.di.annotation" />

 

 

 

<context:include-filter> & <context:exclude-filter>

<context:include-filter>태그와 <context:exclude-filter>태그를 같이 사용하면 자동 스캔 대상에 포함시킬 클래스와 포함시키지 않을 클래스를 구체적으로 명시할 있습니다.

 

<!-- 모든 Bean들을 스캔해서 등록합니다.  -->

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

<mvc:annotation-driven></mvc:annotation-driven>

 

use-default-filters="false"속성은 expression 지정한 타입만 include 시켜줍니다.

<!-- Controller 타입의 Bean 스캔해서 등록합니다.  -->

<context:component-scan base-package="com.tistory.com.SpringBBS" use-default-filters="false">

<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>

</context:component-scan>

<mvc:annotation-driven></mvc:annotation-driven>

 

<!-- Controller 타입을 제외한 모든 Bean들을 Root Context에서 로딩합니다. -->

<context:component-scan base-package="com.tistory.com.SpringBBS">

<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>

</context:component-scan>