Tengo un caso de uso en el que necesito llamar a un método (no estático) solo en el bean, una vez en ApplicationContext load up. ¿Está bien, si uso MethodInvokingFactoryBean para esto? O tenemos una mejor solución?
Como nota al margen, uso ConfigContextLoaderListener para cargar el contexto de la aplicación en la aplicación web. Y quiero, que si bean ‘A’ es instanciado, simplemente llama al método A () una vez.
¿Cómo puede hacerse esto bien?
Puedes usar algo como:
Esto llamará al método “init” cuando se crea una instancia del bean.
Para ampliar la sugerencia de @PostConstruct en otras respuestas, esta es realmente la mejor solución, en mi opinión.
Hay tres enfoques diferentes a considerar, como se describe en la referencia
¿Has intentado implementar InitializingBean
? Suena exactamente lo que buscas.
La desventaja es que su bean se vuelve consciente de Spring, pero en la mayoría de las aplicaciones eso no es tan malo.
Puede 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).
Para aclarar cualquier confusión sobre los dos enfoques, es decir, el uso de
@PostConstruct
y init-method="init"
Por experiencia personal, me di cuenta de que el uso (1) solo funciona en un contenedor de servlets, mientras que (2) funciona en cualquier entorno, incluso en aplicaciones de escritorio. Por lo tanto, si utiliza Spring en una aplicación independiente, deberá usar (2) para llevar a cabo la “invocación de este método después de la inicialización”.