2011-08-05 17 views
7

Comencé a trabajar en un nuevo proyecto utilizando Spring 3 y estoy usando anotaciones. Me encanta que pueda conectar mis clases para obtener las dependencias inyectadas, pero sé que es una mala práctica tener context:component-scan comenzar en el paquete base.¿Qué es una forma inteligente de organizar clases en Spring 3 para escaneo de componentes?

Estoy usando un DispatcherServlet que tiene su propio archivo de configuración xml. En eso también es un context:component-scan. Cuando comencé a aprender Spring, tuve una superposición en mis escaneos de componentes y vi frijoles creados varias veces. Me gustaría evitar eso.

¿Cuál es una buena manera de organizar mis paquetes o mis escaneos de componentes para cubrir todos los beans sin duplicación?

Actualmente tengo paquetes de la siguiente manera:

my.package.controller 
my.package.dao 
my.package.entity 
my.package.service 
my.package.util 

Si tengo granos en todos esos paquetes a continuación, parece que el camino más fácil sería poner en <context:component-scan base-package="my.package"></context:component-scan> applicationContext.xml y hacerse con él.

¿Sería mejor escanear my.package.controller en el xml del operador y el resto (excluyendo my.package.controller) en applicationContext.xml?

¿O debería organizar todas mis clases anotadas en un área y todo lo demás en otra? Algo así como:

my.package.spring.controller 
my.package.spring.dao 
my.package.spring.entity 
my.package.spring.service 
my.package.spring.util 
my.package.notannotated 
my.package.notannotated2 

estoy usando @Autowired añadir registro a la mayoría si no todas mis clases, así que no sé que voy a tener ninguna clase que no serán anotados.

Odio quedar atrapado en la configuración ... Prefiero quedar atrapado en el código, por lo que si alguien puede ofrecer algún consejo, los recibiré inmediatamente.

Gracias!

Respuesta

12

Sí - en el contexto de la exploración principal todo, excepto los controladores

<context:component-scan base-package="my.package"> 
    <context:exclude-filter type="regex" expression="my\.package\.controller.*"/> 
</context:component-scan> 

y en su contexto DispatcherServlet simplemente escanear el paquete controlador.

+0

Guau, eso fue más fácil de lo que pensaba, gracias. ¿La configuración de mi paquete parece razonable? – Paul

+0

Me parece bien, eso es casi exactamente lo que hago. – sourcedelica

Cuestiones relacionadas