SSM框架中 自定义 Listener

第一步、web.xml 配置

<listener>
  <listener-class>com.jeeplus.modules.sys.listener.WebContextListener</listener-class>
</listener>
<listener>
  <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
<!-- 自定义listener 必须配置放在 ContextLoaderListener 之后-->
<listener>
  <listener-class>com.jeeplus.modules.sys.listener.MyContextListener</listener-class>
</listener>

第二步、自定义 listener

public class MyContextListener implements ServletContextListener {

   @Override
   public void contextInitialized(ServletContextEvent sce) {
      System.out.println("=========自定义 listenr=======");
      //注入 AnsCustBasicDao ,不能通过 注解方式注入
        AnsCustBasicDao ansCustBasicDao= WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext()).getBean(AnsCustBasicDao.class);
        AnsCustBasic ansCustBasic= ansCustBasicDao.get("1d225dd66ca64f34a9ef272b2ce589ae");
        System.out.println("在自定义 listen 中获取用户信息:"+ansCustBasic.toString());

   }

   @Override
   public void contextDestroyed(ServletContextEvent servletContextEvent) {

   }
}

注意:在自定义 listener 中如果需要使用 spring 容器中的 bean ,不可以直接  @Autowired  

(1) Listener的生命周期是由servlet容器(例如tomcat)管理的,项目启动时上例中的ConfigListener是由servlet容器实例化并调用其contextInitialized方法,而servlet容器并不认得@Autowired注解,因此导致ConfigService实例注入失败

(2) 而spring容器中的bean的生命周期是由spring容器管理的

这就需要用到spring为我们提供的WebApplicationContextUtils工具类,该工具类的作用是获取到spring容器的引用,进而获取到我们需要的bean实例。

 

如果只是作为自定义启动类的话,还有另外一种方法,就是 实现 InitializingBean 接口,重写其中的方法 afterPropertiesSet( ),实现效果是一样

@Component
public class MyContextListener2 implements InitializingBean {

    @Autowired
    private AnsCustBasicDao ansCustBasicDao;

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("自定义 listener  实现 InitializingBean 接口");
        AnsCustBasic ansCustBasic= ansCustBasicDao.get("1d225dd66ca64f34a9ef272b2ce589ae");
        System.out.println("自定义 listener  实现 InitializingBean 接口获取用户信息:"+ansCustBasic.toString());
    }
}

转载于:https://my.oschina.net/u/3387320/blog/3010571

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值