tutorial mvc modelandview español ejemplo anotaciones spring initialization startup applicationcontext

modelandview - spring mvc tutorial español pdf



¿Cómo llamar a un método después de que se completa la inicialización del bean? (6)

Tengo un caso de uso en el que necesito llamar a un método (no estático) en el bean solo una vez en la carga de ApplicationContext. ¿Está bien si utilizo MethodInvokingFactoryBean para esto? ¿O tenemos una solución mejor?

Como nota al margen, uso ConfigContextLoaderListener para cargar el contexto de la aplicación en la aplicación web. Y quiero, que si el bean ''A'' se crea una instancia, simplemente llame a methodA () una vez.

¿Cómo se puede hacer esto muy bien?


¿Has intentado implementar InitializingBean ? Suena como exactamente lo que estás buscando.

El inconveniente es que su bean se vuelve consciente de Spring, pero en la mayoría de las aplicaciones no es tan malo.


Hay tres enfoques diferentes a considerar, como se describe en la reference

Utilizar atributo de método de inicio

Pros:

  • No requiere bean para implementar una interfaz.

Contras:

  • No se requiere una indicación inmediata de este método después de la construcción para garantizar que el bean está configurado correctamente.

Implementar InitializingBean

Pros:

  • No es necesario especificar el método de inicio, o activar el escaneo de componentes / procesamiento de anotaciones.
  • Adecuado para los beans suministrados con una biblioteca, donde no queremos que la aplicación que utiliza esta biblioteca se refiera al ciclo de vida del bean.

Contras:

  • Más invasivo que el enfoque del método init.

Use la anotación de ciclo de @PostConstruct @PostConstruct JSR-250

Pros:

  • Útil cuando se utiliza el escaneo de componentes para autodetectar frijoles.
  • Deja en claro que se debe utilizar un método específico para la inicialización. La intención está más cerca del código.

Contras:

  • La inicialización ya no se especifica centralmente en la configuración.
  • Debe recordar activar el procesamiento de anotaciones (que a veces se puede olvidar)

Para aclarar cualquier confusión sobre los dos enfoques, es decir, el uso de

  1. @PostConstruct y
  2. init-method="init"

Por experiencia personal, me di cuenta de que usar (1) solo funciona en un contenedor de servlets, mientras que (2) funciona en cualquier entorno, incluso en aplicaciones de escritorio. Por lo tanto, si utilizaría Spring en una aplicación independiente, tendría que usar (2) para llevar a cabo eso "llame a este método después de la inicialización.


Para ampliar la sugerencia de @PostConstruct en otras respuestas, esta es la mejor solución, en mi opinión.

  • Mantiene su código desacoplado de la API de Spring (@PostConstruct está en javax. *)
  • Anota explícitamente su método init como algo que necesita ser llamado para inicializar el bean
  • No es necesario recordar agregar el atributo init-method a su definición de bean bean, spring llamará automáticamente al método (suponiendo que registre la opción de anotación-config en cualquier otra parte del contexto, de todos modos).

Podría implementar un BeanPostProcessor personalizado en el contexto de su aplicación para hacerlo. O si no le importa implementar una interfaz Spring en su bean, puede usar la interfaz InitializingBean o la directiva "init-method" (mismo enlace).


Puedes usar algo como:

<beans> <bean id="myBean" class="..." init-method="init"/> </beans>

Esto llamará al método "init" cuando se ejecute el bean.