使用@Autowired自动装配Bean时出现错误,代码如下:
public class GetYJGNQ extends HttpServlet {
@Autowired
private IDataForWebService getDataForWebService;
/**
*
*/
private static final long serialVersionUID = 1L;
public void setGetDataForWebService(IDataForWebService getDataForWebService) {
this.getDataForWebService = getDataForWebService;
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.print(getDataForWebService.getYJGNQ());
out.flush();
out.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
代码getDataForWebService.getYJGNQ()会java.lang.NullPointerException,因为getDataForWebService 没有装配上,所以是空指针
解决方式如下:
第一种:
在Servlet的init方法中增加以下代码,即可通知Servlet在启动时,自动查找getDataForWebService并装配,
public void init(ServletConfig config) throws ServletException {
ServletContext servletContext = config.getServletContext();
WebApplicationContext webApplicationContext = WebApplicationContextUtils
.getWebApplicationContext(servletContext);
AutowireCapableBeanFactory autowireCapableBeanFactory = webApplicationContext
.getAutowireCapableBeanFactory();
autowireCapableBeanFactory.configureBean(this, "getDataForWebService");
}
这个在配置文件中配置好使,但现在我们使用的自动装配,那就要用第二种。
第二种方式:
public void init(ServletConfig config) throws ServletException {
SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this,
config.getServletContext());
}
原文: 点击打开链接