Grails开发随笔系列(三)覆盖spring bean

grails有个轻量级事件发布订阅插件叫falcone util,是很好很好的。。。

grails还有个查询插件叫searchable,也是很好很好的。。。

 

可这两个家伙碰到一起问题就来了。falcone util里把grails原来的sessionFactory给代理了,用的是spring BeanFactoryPostProcessor。而searchable插件调用的compass库使用sessionFactory时直接把他当成其实现SessionFactoryImpl来用,结果世界不清净了。。。

 

好在我用falcone util只是想把发邮件等逻辑从service中分离,并不想监听hibernate那一大堆事件,所以falcone util对sessionFactory的黑客行为对我是没有意义的,可以去掉。直接改他的源码当然可以,不过这样我就要多维护一套源码。这很不好。

其实只要把falcone util放在spring里的那个BeanFactoryPostProcessor覆盖掉就好了,falcone util源码中这样写的

 

def doWithSpring = {

 ...

  interceptableSessionFactoryPostProcessor(InterceptableSessionFactoryPostProcessor)

}

 InterceptableSessionFactoryPostProcessor就是那个干坏事的BeanFactoryPostProcessor。

 

简单了,我在我的grails项目的/grails-app/conf/spring/resources.groovy中加一句

 

interceptableSessionFactoryPostProcessor(Object)
 就把原来那个 interceptableSessionFactoryPostProcessor覆盖掉了。世界清静了,偶也~~~

你可能感兴趣的:(spring,bean,Hibernate,grails,groovy)