[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")