es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Decorar o interceptar un Bean de Spring con @Autowired

Estoy actualizando una aplicación antigua de Java EE a una solución basada en Spring. En las aplicaciones antiguas había anotaciones personalizadas para crear un proxy, inyectar un bean de proxy e interceptar la invocación del método (las clases de interceptor implementan MethodInterceptor) o (implementan InvocationHandler), que solían realizar algunas tareas antes y después de la ejecución.

Hemos reemplazado esas anotaciones personalizadas con interfaces de marcador de Spring como @Service, @Repository, etc., y ahora podemos usar @Autowired para las instancias de beans. Ahora mi pregunta es cómo interceptar estos beans autowired para realizar actividades de ejecución anteriores y posteriores. Una solución que se me ocurre es usar Spring AOP y el punto de corte @Around. Solo quiero saber si hay alguna otra y mejor alternativa que se puede usar, como:

  1. extender org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor
  2. Usar BeanFactoryPostProcessor o BeanPostProcessor.
  3. Usar InstantiationAwareBeanPostProcessor
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en tecnología de la información especializado en Spring, diría que una de las mejores soluciones para interceptar beans autowired en Spring es utilizar Spring AOP y el punto de corte @Around. Sin embargo, también existen otras alternativas que se pueden considerar:

    1. Extendiendo org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor: Este enfoque te permite personalizar el comportamiento del proceso de autowiring, como agregar lógica adicional al proceso de instanciación del bean. Sin embargo, este enfoque puede no ser adecuado para realizar actividades de ejecución previas y posteriores.
    2. Utilizando BeanFactoryPostProcessor o BeanPostProcessor: Estas interfaces te permiten modificar definiciones de bean e instancias de bean antes y después de que sean creadas por el contenedor de Spring. Este enfoque puede ser útil para realizar actividades como inicialización de propiedades o personalización de bean. Sin embargo, este enfoque puede no ser adecuado para interceptar invocaciones de métodos.

    3. Utilizando InstantiationAwareBeanPostProcessor: Esta interfaz te permite modificar instancias de bean antes de que estén completamente inicializadas por el contenedor de Spring. Este enfoque puede ser útil para realizar actividades como inyección de dependencias o lógica de inicialización personalizada. Sin embargo, este enfoque puede no ser adecuado para interceptar invocaciones de métodos.

    En general, la mejor solución dependerá de tus requisitos y caso de uso específicos. Para interceptar invocaciones de métodos, Spring AOP con el punto de corte @Around es generalmente el mejor enfoque. Sin embargo, si necesitas personalizar el proceso de instanciación del bean o realizar otras actividades de inicialización, las otras alternativas pueden ser más adecuadas.

Comments are closed.