2011-12-15 21 views

Respuesta

114

Prácticamente no creo que haya ninguna diferencia, pero hay prioridades en la forma en que funcionan. @PostConstruct, init-method son BeanPostProcessors.

  1. @PostConstruct es una anotación de JSR-250 mientras init-method es la manera de tener un método de inicialización de la primavera.
  2. Si tiene un método @PostConstruct, esto se llamará primero antes de llamar a los métodos de inicialización.
  3. Si su bean implementa InitializingBean e invalida afterPropertiesSet, se llama primero @PostConstruct, luego afterPropertiesSet y luego init-method.

Para obtener más información, puede consultar Spring reference documentation.

+18

Si un grano está utilizando más de uno de esos métodos y confiando en el orden de inicialización, que va a ser terriblemente complejo y imposible de mantener. –

+2

@Donal Muy cierto. Solo estaba proporcionando información sobre cómo funciona esto. –

+1

Hay una diferencia importante: debe configurar específicamente Spring para procesar las anotaciones y hacer que @PostConstruct funcione: http://stackoverflow.com/q/3434377/134898 –

18

No hay diferencia real. Se trata de cómo prefieres configurar tu sistema, y ​​esa es una cuestión de elección personal. Yo prefiero usar las anotaciones @PostConstruct para mi propio código (ya que el bean solo se configura correctamente después de llamar al método) y uso init-method al crear instancias de beans de bibliotecas que no son Spring-aware (no se pueden aplicar anotaciones allí, por supuesto !) pero puedo entender totalmente a las personas que quieren hacerlo de una forma u otra.

4

@postconstruct no es parte de la primavera. Es parte del paquete javax. Ambos son lo mismo. usando init-method necesitamos agregarlo en el archivo xml. Si usas @postconstruct no es necesario agregar xml. Mira el artículo a continuación.

http://answersz.com/spring-postconstruct-and-predestroy/

+0

¿Puede mostrar las partes relevantes del artículo? – segarci