zoukankan      html  css  js  c++  java
  • Listener中@Autowired无法注入的问题

    最近在用监听器的时候遇到了spring无法注入的问题,代码如下,这个task总是null,包明明已经被扫到了,就是注入不进来。

    public class MyListener implements ServletContextListener {
    
       @Autowired
    private TaskThread taskThread; @Override public void contextInitialized(ServletContextEvent sce) { task.doThread0(); } @Override public void contextDestroyed(ServletContextEvent sce) { } }

    原因如下:在Listener监听器中无法使用Spring容器的@Resource或者@Autowired 注解的方法注入bean,因为,在web Server容器中,无论是Servlet,Filter,还是Listener都不是Spring容器管理的,因此我们都无法在这些类中直接使用Spring注解的方式来注入我们需要的对象。在这里,Servlet的整个生命周期都是由Servlet容器来处理的。如果把它硬放到Spring容器中去创建,Servlet对象是可被Spring容器建出来,但Servlet容器可能跟本就不知道这个Servlet是否存在,因为不在它自己的容器中。所以,servlet交给web server来管理,不要交给spring管理。

    做如下修改:

    从spring的上下文中获取,完美解决了问题。

    public class MyListener implements ServletContextListener {
        
        @Override
        public void contextInitialized(ServletContextEvent sce) {
            WebApplicationContext context = WebApplicationContextUtils.getRequiredWebApplicationContext(sce.getServletContext());
            TaskThread task = context.getBean(TaskThread.class);
            task.doThread0();
        }
    
        @Override
        public void contextDestroyed(ServletContextEvent sce) {
    
        }
    
    }

     

  • 相关阅读:
    openGL 纹理05
    音视频系列文章
    webrtc系列文章
    ! [rejected] master -> master (non-fast-forward)
    openGL 预定义变量04
    Android项目实战--手机卫士24--程序锁的实现以及逻辑
    大数记录之,大数乘整型数nyoj832
    与IO相关的等待事件troubleshooting-系列9
    发布文章时多少天、多少小时、多少分前发布功能
    CSS3之边框图片border-image
  • 原文地址:https://www.cnblogs.com/zhangjianbing/p/9449908.html
Copyright © 2011-2022 走看看