Spring对Servlet注入Dao或Service

当想在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); 

 

 

猜你喜欢

转载自zgphacker2010.iteye.com/blog/2368858