今天在使用doFilter时,测试了十几次就是无法获取newsService对象,总是报newsService为null, 经过网上查询相关资料之后发现在普通的java中,只要声明(set,get方法)后在spring-application配置文件中配置就可以了,但是由于Filter与Listener需要配置在web.xml文件中,所以它们的对象是由容器创建的。通常在Spring的application-context.xml配置文件中编写的bean由Spring负责创建,所以直接在Spring配置文件配置过滤器与监听器是无法达到注入目的的。
可以使用如下方法,例:
public class ValidateWeixinController extends BaseController implements Filter {
private NewsService newsService;
private InfoService infoService;
private StadiumService stadiumService;
public NewsService getNewsService() {
return newsService;
}
public void setNewsService(NewsService newsService) {
this.newsService = newsService;
}
public InfoService getInfoService() {
return infoService;
}
public void setInfoService(InfoService infoService) {
this.infoService = infoService;
}
public StadiumService getStadiumService() {
return stadiumService;
}
public void setStadiumService(StadiumService stadiumService) {
this.stadiumService = stadiumService;
}
@Override
public void init(FilterConfig config) throws ServletException {
System.out.println("ValidateWeixinController启动成功!");
ServletContext context = config.getServletContext();
ApplicationContext ac = WebApplicationContextUtils.getWebApplicationContext(context);
newsService = (NewsService) ac.getBean("newsService");
infoService = (InfoService) ac.getBean("infoService");
stadiumService = (StadiumService) ac.getBean("stadiumService");
}
......
}