使用Guice

时间:2016-07-26 18:38:17

标签: java hibernate orm hibernate-5.x entitylisteners

我正在使用新的Hibernate 5 Bootstrap API并且很高兴看到(与之前的/遗留的API相比)可以轻松组装SessionFactory和系列。

现在,我想提供自己的ListenerFactory,它基本上将实体监听器的创建和依赖注入委托给Guice。

除了SessionFactoryBuilder的applyBeanManager之外,我找不到怎么做:

sessionFactoryBuilder.applyBeanManager(new ListenerFactory() {
  @Override
  public void release() {
  }

  @Override
  public <T> Listener<T> buildListener(final Class<T> listenerClass) {
    return () -> injector.getInstance(listenerClass);
  }
});

不幸的是,这不起作用bc Hibernate期望ListenerFactory为null(并使用默认的ListenerFactory)或者是BeanManager的实例。

想知道是否有其他方式提供我自己的ListenerFactory?

感谢。

1 个答案:

答案 0 :(得分:1)

那是因为BeanManager是为CDI设计的。如果您想在CDI之外自定义它,您需要打开描述您的用例以及您想要做的事情的JIRA问题。

或者,如果你想将依赖项注入你的实体(我发现它真的很奇怪,因为它打破了层封装),你可以使用LoadEventListener来自定义实体的创建方式:

sessionFactory
.getServiceRegistry()
.getService( EventListenerRegistry.class )
.prependListeners( EventType.LOAD, new MyGuiceEntityListener() );