본문 바로가기

Programming/Spring

[Spring] 어노테이션 Component-scan 분리하기

어노테이션 Component-scan 분리하기



어노테이션이 적용된 class(@Controller, @Service, @Repository 를 포함한 class)를 

로딩 base-package로 부터 스캔을 할 때 Controller 타입은 제외 시킨다.

제외 시키는 이유는 spring mvc에 관련된 설정 파일은 dispatcher-servlet.xml 에서 스캔 하기 때문이다.


application-context.xml

<context:component-scan base-package="com.web.myproject" scoped-proxy="targetClass">

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

</context:component-scan>


scoped-proxy 는 아래의 3가지를 지정할 수 있다.

no : default, proxy를 생성하지 않는다.

interface : JDK Dynamic Proxy를 이용한 Proxy 생성

targetClass : CGLIB(code generator library)를 이용한 Proxy 생성


Dispatcher-servlet.xml

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

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

</context:component-scan>

base-package로 부터 스캔을 할 때, spring mvc에 관련된 Controller 타입만 스캔 한다.


기본 필터의 사용을 false로 지정하면 @Component, @Repository, @Service, @Controller

어노테이션을 사용하는 클래스를 bean으로 인식하지 않는다.