2011-03-11 7 views
149

¿Cómo puedo agregar varios paquetes en el archivo spring-servlet.xml en el elemento context:component-scan?paquetes múltiples en contexto: component-scan, spring config

He tratado

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

y

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

y

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

pero ha obtenido un error:

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

Respuesta

217

El siguiente enfoque es correcto:

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

Tenga en cuenta que se queja el error sobre x.y.z.dao.daoservice.LoginDAO, que no está en los paquetes mencionados anteriormente, tal vez se le olvidó añadir que:

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

Sí, así lo creo (+1) –

+4

Esta respuesta implica que NO hay recursividad para los miembros del paquete base, PERO HAY: http://stackoverflow.com/questions/7774295/spring-xml-file-configuration-hierarchy-help-explanation/7774597 # 7774597. Sugeriría alterar un poco la respuesta para aclarar esto. – djangofan

42

Yo u puede agregar varios paquetes de bases (ver axtavt's answer), pero también se puede filter what's scanned dentro del paquete básico:

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

Gracias Señor, ahora se está trabajando – Shams

+2

@shams hay necesidad de Sir mí, pero si la respuesta es correcta, debe marcarla como aceptada (haga clic en la marca de verificación) –

+1

¿Por qué no puede agregar varios paquetes base? Al igual que, por ejemplo, "org.example, com.example"? –

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

funcionará, ya que el resto de los paquetes son paquetes secundarios de "x.y.z". Por lo tanto, no necesita mencionar cada paquete individualmente.

+0

Siento que esto no es cierto ... – elcadro

+25

@elcadro te has sentido mal – NimChimpsky

+2

Ok!Tal vez fue otra razón, pero esto simplemente no funcionó para mí con mvc de primavera para portlets ... – elcadro

31

Enfoque anotación

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

¿Necesitamos obligatoriamente agregar paquetes específicos o puede analizar subpaquetes automáticamente si solo definimos el paquete de nivel superior? –

+0

@NikhilSahu no, es un escaneo recursivo (Primavera 3>) –

4

Otro enfoque anotación en general:

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

Si xyz es el paquete común entonces usted puede utilizar:

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

que incluirá todo el paquete que comienza con xyz como: xyzcontroller, xyzservice etc.

0

por ejemplo, tiene el paquete "com.abc" y tiene varios paquetes en su interior, Se puede utilizar como

@ComponentScan("com.abc") 
Cuestiones relacionadas