[java] 컨텍스트에서 여러 패키지 : 컴포넌트 스캔, 스프링 구성

context:component-scan요소의 spring-servlet.xml 파일에 여러 패키지를 어떻게 추가 할 수 있습니까?

나는 시도했다

<context:component-scan base-package="z.y.z.service" base-package="x.y.z.controller" />

<context:component-scan base-package="x.y.z.service, x.y.z.controller" />

<context:component-scan base-package="x.y.z.service" />
<context:component-scan base-package="x.y.z.controller" />

그러나 오류가 발생했습니다 :

org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [x.y.z.dao.daoservice.LoginDAO] found for dependency:



답변

다음과 같은 접근법이 맞습니다.

<context:component-scan base-package="x.y.z.service, x.y.z.controller" /> 

x.y.z.dao.daoservice.LoginDAO위에 언급 된 패키지에없는 오류에 대해 불평하는 경우가 있습니다.

<context:component-scan base-package="x.y.z.service, x.y.z.controller, x.y.z.dao" /> 


답변

주석 접근법

@ComponentScan({ "x.y.z", "x.y.z.dao" })


답변

여러 기본 패키지를 추가 할 수 있지만 ( axtavt의 답변 참조 ) 기본 패키지 내 에서 스캔 한 내용필터링 할 수도 있습니다 .

<context:component-scan base-package="x.y.z">
   <context:include-filter type="regex" expression="(service|controller)\..*"/>
</context:component-scan>


답변

<context:component-scan base-package="x.y.z"/>

나머지 패키지는 “xyz”의 하위 패키지이므로 작동합니다. 따라서 각 패키지를 개별적으로 언급 할 필요가 없습니다.


답변

또 다른 일반적인 주석 접근법 :

@ComponentScan(basePackages = {"x.y.z"})


답변

xyz가 일반적인 패키지이면 다음을 사용할 수 있습니다.

<context:component-scan base-package="x.y.z.*">

xyz로 시작되는 모든 패키지가 포함됩니다 : xyzcontroller, xyzservice 등


답변

예를 들어 “com.abc”패키지가 있고 그 안에 여러 패키지가 있으면 다음과 같이 사용할 수 있습니다.

@ComponentScan("com.abc")