当想在Servlet中注入Dao时,使用spring容器注入时,发现在Servlet类里注入的到的值为null, 导致无法使用dao类型。通过查了资料发现原因是:
在spring的自动注入中普通的POJO类都可以使用@Autowired进行自动注入,但是除了两类:Filter和Servlet无法使用自动注入属性。(因为这两个归tomcat容器管理)可以用init(集承自HttpServlet后重写init方法)方法中实例化对象,
servlet是动态网页项目区别于普通的java项目的,是动态网页项目中web.xml主要配置文件管理的,而spring只能管理普通的pojo,而没办法直接注入,尽管你的注入方式和配置方式都没有问题。其实filter也是会遇到类似问题的。
public void init(ServletConfig config) throws ServletException {
super.init(config);
WebApplicationContext applicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServletContext());
UserDao = (UserDao )applicationContext.getBean("userDao");
logger.info("初始化web服务信息成功...");
}
除了可以用WebApplicationContext获取之外,用ClassPathXmlApplicationContext来获取也是可以的。
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplication("配置文件路径字符串");
xxxService接口 = ctx.getBean("id的字符串",XxxService接口.class);