1. 程式人生 > >Spring中Servlet注入service時無法@Autowired自動注入的問題解決

Spring中Servlet注入service時無法@Autowired自動注入的問題解決

今天遇到了一個問題,就是Controller層自動注入service時,一直在報空指標異常,而使用getbean卻好好的,百思不得其解,終於得到了解決的方法。

10-Dec-2018 22:21:21.619 嚴重 [http-nio-8080-exec-5] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [com.ly.controller.ShowViewServlet] in context with path [/spring] threw exception
 java.lang.NullPointerException
	at com.ly.controller.ShowViewServlet.doGet(ShowViewServlet.java:44)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)

解決:

在Controllre中加入:

@Override
    public void init() throws ServletException {
        super.init();
        ServletContext application = this.getServletContext();
        // 解決servlet用@Autowired自動注入service失敗的問題
        SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this, application);
    }

並且在web.xml中加入:

    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>
    <context-param>

        <param-name>contextConfigLocation</param-name>

        <param-value>classpath*:applicationContext*.xml</param-value>

    </context-param>

完美解決。