2009-07-09 13 views
9

¿Cuál es la forma más concisa de asegurarse de que un Spring Bean tenga todas las propiedades establecidas y se llame al método init?Asegurarse de que Spring Bean esté inicializado correctamente

A favor de las respuestas que usan setter injection y configuración XML, ya que eso es lo que estoy usando en este momento.


estoy tratando de evadir el caso en el que sea olvido de configurar una incubadora o llamar al init-method.


En los proyectos futuros que estaría a favor de skaffman's response, pero he elegido la que se adapte a mí en este momento.

Respuesta

2

Utilice los siguientes atributos de la etiqueta para asegurarse de que los granos de comprobación de dependencia y el método init se invoca en todos los beans, pero supone que no llama a su método "innit".

<beans default-init-method="init" default-dependency-check="objects"> 

ver link

6

Use la @Required annotation en los métodos setter. Spring verificará que se hayan configurado todas sin tener que verificar manualmente.

O bien, anote sus métodos init con @PostConstruct, y Spring los invocará por usted.

+0

no surgirían establecer todas las dependencias antes de darle un grano? – fastcodejava

+1

@fastcodejava no si alguien no configuró la configuración Spring correctamente/completamente. Es fácil cometer errores ... es bueno saberlo en el momento del despliegue, no cuando la aplicación explota delante de un usuario :) – Brabster

+0

@brabster - ah ¡Ya veo! – fastcodejava

5

Puede agregar el atributo de verificación de dependencia a su definición de bean para asegurarse de que se hayan establecido todos los objetos/primitivas/ambos.

<bean id="myBean" class="com.foo.MyBean" dependency-check="objects"/> 

respuesta de Skaffman da más control, pero sí introduce una dependencia en tiempo de compilación en primavera, que puede/no puede desear.

+0

¿Los "objetos" tienen algún valor mágico? – skaffman

+0

"objetos" significa que Spring verificará que solo se hayan establecido las propiedades de los objetos (no primitivos). – Adamski

+0

Hmm, no sabía que pudieras hacer eso, que se parece al núcleo duro de Spring 1.2 cosas :) – skaffman

8

Esto poll es exactamente lo que estás buscando.

Éstos son los resultados:

  • mediante el atributo de dependencia-cheque en XML: 11,52%
  • Mediante el uso de la anotación @Required (o una anotación personalizada): 21,40%
  • Mediante el uso de InitializingBean y una instalación de aserción: 23,87%
  • mediante el uso de init-método y una instalación de aserción: 14,40%
  • I no tienen que, porque uso de inyección de constructor de propiedades requeridas: 19,34%
  • verifico mis dependencias en mis métodos de negocios: 7,41%
  • No comprobar las dependencias necesarias: 34.16%
+0

+1: Interesante ... aunque sorprendido de que la máxima votación sea "No verifico las dependencias requeridas". – Adamski

+1

No controlo tampoco, pero quiero hacerlo. Es por eso que hice la pregunta. –

+0

Esa es una encuesta muy antigua, también, por lo que los desarrolladores de Spring estarán más al tanto de los gustos de @Required ahora. – skaffman

Cuestiones relacionadas