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


185

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:

답변:


272

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

<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" /> 

5
이 대답은 기본 패키지의 회원 재귀가되지 않지만이 있음을 의미한다 stackoverflow.com/questions/7774295/...가 . 나는 이것을 명확하게하기 위해 대답을 약간 변경하는 것이 좋습니다.
djangofan


43

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

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

2
@shams는 저를 필요로하지 않지만, 정답이 맞는 경우이를 승인 된 것으로 표시해야합니다 (확인 표시 클릭)
Sean Patrick Floyd

1
기본 패키지를 여러 개 추가 할 수없는 이유는 무엇입니까? 예를 들어 "org.example, com.example"?
Shervin Asgari

@Shervin 당신은 할 수 있습니다. 당신이 쓴 그대로. "또는 각 클래스의 상위 패키지를 포함하는 쉼표로 구분 된 목록을 지정할 수 있습니다." (또한 예상 답변 참조)
Sean Patrick Floyd

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

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


2
확인! 어쩌면 그것은 또 다른 이유 였지만, 이것은 포틀릿을위한 스프링 mvc와 함께 작동하지 않았다 ...
elcadro

@elcadro는 다른 이유를 겪었을 것입니다. 이것은 잘 문서화되고 광고 된 기능이기 때문입니다.
eis

글쎄, 많은 사람들이 나를 고 치면서 반대의 말을 할 수 없습니다. 왜 이것이 효과가 없는지 알 수 있기를 바랍니다 ... 어쨌든 감사합니다!
elcadro

주석 기반 구성에서도 마찬가지입니까?
니힐 사후

6

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

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

2

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

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

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


1

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

@ComponentScan("com.abc")

0

응답이 지연되었지만 주석 기반 접근 방식을 사용하여 여러 패키지를 제공하기 위해 다음과 같이 사용할 수 있습니다.

@ComponentScan({"com.my.package.one","com.my.package.subpackage.two","com.your.package.supersubpackage.two"})

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.