鍍金池/ 問答/Java  C#/ 如何解決無法通過注解注入javabean?

如何解決無法通過注解注入javabean?

功能說明:
在tomcat啟動時,同時開啟一個線程,目前線程啟動沒有問題,但是由于無法注入javabean,導(dǎo)致空指針異常。要注入的javabean是自己封裝的,用來實現(xiàn)特定的功能,類上有加@Component 注解,也在package-scan的掃描范圍。(注:使用的SSM框架)

代碼如下:

@Controller
public class UDPServer implements ServletContextListener {

    // 通過注解注入封裝線程的Bean
    @Autowired
    UDPThread udpThread;

    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
        // 通過注入的Bean啟動線程
        udpThread.execute();
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {

    }
}
回答
編輯回答
賤人曾

問題解決了,具體過程如下:

1.在contextInitialized中添加:

UDPThread udpThread = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContextEvent.getServletContext()).getBean(MyBean.class);

2.在web.xml中添加:

  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <listener>
    <listener-class>cn.env.web.util.UDPServer</listener-class>
  </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:/config/Spring-*.xml</param-value>
  </context-param>

參考stackoverflow寫的第一步,另外還需要配置web.xml,否則tomcat無法啟動:鏈接描述

2017年1月26日 08:05
編輯回答
深記你

首先,你要知道ServletContextListener是啥?為什么會失效,
ServletContextListener使用詳解

其次,這種問題為何不先Google或者百度一下???
答案在這@Autowired in ServletContextListener


有這提問的時間為何不先搜索呢
百度搜索結(jié)果
Google搜索結(jié)果

2018年8月24日 11:22