Spring + EntityManagerFactory + Hibernate Listeners + Injection

我有一个简单的问题。 可以通过@Ressource或@Autowired向Hibernate Eventlistener添加dependency injection吗?

我将向您展示我的entitymanagerfactory配置:

                          

目前我通过jpa.properties注册我的监听器,

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

但在这种情况下,我的听众没有弹簧注射。 我找到了一个解决方案,但这使用sessionFactory而不是entitymanager oder我可以在我的上下文中修改sessionfactory吗? 希望有人有一个好主意或解决方案来处理这个问题!

十分感谢!

如果您使用了SessionFactory,那么这将是配置:

              

但是由于您使用的是JPA,我担心您需要使用此线程中概述的AOP

或者你可以

  1. 将ApplicationContext存储在ThreadLocal或自定义holder类中,并通过静态方法公开它
  2. 为你的听众提供这样的基类:

基类:

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

现在在你的lifycycle方法中首先调用wireMe()


更新:

以下是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(){ } } 

将它连接到Spring Bean配置中,如下所示: