0

我希望在运行时向会话或会话工厂添加一个拦截器。我设法用事件处理程序做这样的事情:

@Component
public class HibernateEventListenersRegisterer {
   /** The post load event listener. */
   @Resource
   private GenericPostLoadEventListener postLoadEventListener;

   /** The session factory. */
   @Resource
   private SessionFactory sessionFactory;


   /**
   * Register all event listeners.
   */
   @PostConstruct
   public void registerEventListeners() {
     EventListenerRegistry registry = ((SessionFactoryImpl) sessionFactory).getServiceRegistry()
                    .getService(EventListenerRegistry.class);

     registry.getEventListenerGroup(EventType.POST_LOAD).appendListener(postLoadEventListener);

   }
}

我想以同样的方式使用拦截器……可以吗?

4

1 回答 1

0

不,你不能。反而:

自己创建一个拦截器或侦听器以永久添加,但您可以访问以添加/删除委托拦截器/侦听器(或以其他方式可切换地启用/或委托您的功能)。

然后,一旦您可以在运行时获得对它的引用(静态单例可能是简单的方法),您就可以以编程方式打开/关闭您的功能或添加/删除您的委托。

(我实际上已经做了一些与 Hibernate Generators 相关的事情,根据部署的数据库类型进行委派;它确实有效。)

注意:这里美中不足,是配置&启动;初始化事件不会轻易传递给尚未创建的委托。

于 2013-05-02T11:41:38.300 回答