Spring中实现监听的方法

  在未使用框架进行编程的时候,我们常常在web.xml中加上这样一段话 

<listener>
        <listener-class>XXX</listener-class>
  </listener>

  在对应的类中实现ServletContextListener接口,这样在服务器已启动的时候,就会加载相应的程序

  但是现在在spring为我们提供了它特有的方法

  

在spring启动时自动调用一些db操作作缓存,于是在service实现ApplicationListener 接口

并重写onApplicationEvent操作。这样就实现了要求,代码如下:

@Service
@Scope("singleton")
public class MasterServiceImpl implements ApplicationListener {
    public void onApplicationEvent(ApplicationEvent arg0) {
        一些DB操作
    }
}
 由于我们是spring托管事务,并且采用注入方式调用。

  这样的写法带来了一些问题,正常的action注入service调用的时候再事务范围内,出事务的时候会对DB连接进行释放,

  因为是这个service是系统启动直接调用的这些方法,不在事务管理范围内,于是这些DB的操作没有进行DB连接释放(关闭)。

  解决办法是,写一个专门的action实现ApplicationListener 接口,在这个action重新的onApplicationEvent方法内,

  调用该单例service,从而实现事务的入口登记,在出事务的时候就可以自动释放连接了。

原文地址:https://www.cnblogs.com/yaobolove/p/5291373.html