Spring + EntityManagerFactory + Hibernate Listeners + Injection

tengo una pregunta simple Es posible agregar dependency injection a través de @Ressource o @Autowired al Hibernate Eventlistener?

Le mostraré mi configuración de entitymanagerfactory:

                          

En el momento que registro mi oyente a través de jpa.properties,

 hibernate.ejb.event.load=com.example.hibernate.events.LoadEvent 

pero en este caso no tengo inyección de resorte en mi oyente. Encontré una solución, pero este uso de sessionFactory y no de entitymanager oder ¿puedo modificar la sessionfactory en mi contexto? ¡Espero que alguien tenga una buena idea o solución para lidiar con esta problemática!

¡Muchas gracias!

Si usaste SessionFactory, esta sería la configuración:

              

Pero como está usando JPA, me temo que necesita usar AOP como se describe en este hilo.

O tu puedes

  1. almacene ApplicationContext en un ThreadLocal o una clase de titular personalizado y expóngalo a través de un método estático
  2. tener una clase base para tus oyentes algo como esto:

Clase base

 public abstract class ListenerBase{ protected void wireMe(){ ApplicationContext ctx = ContextHelper.getCurrentApplicationContext(); ctx.getAutowireCapableBeanFactory().autowireBean(this); } } 

Ahora en sus métodos de wireMe() llame a wireMe() primero.


Actualizar:

Aquí hay una implementación de muestra de ContextHelper :

 public final class ContextHelper implements ApplicationContextAware{ private static final ContextHelper INSTANCE = new ContextHelper(); private ApplicationContext applicationContext; @Override public void setApplicationContext(final ApplicationContext applicationContext){ this.applicationContext = applicationContext; } public static ApplicationContext getCurrentApplicationContext(){ return INSTANCE.applicationContext; }; public static ContextHelper getInstance(){ return INSTANCE; } private ContextHelper(){ } } 

Conéctalo a tu configuración de Spring Bean de esta manera: