今天在配置监听器的时候,遇到了这样一个报错:javax.naming.NameNotFoundException: Name com.xxx.xxx.xxxListener is not bound in this Context,
4个小时之后,终于弄清楚了原因。
由于使用了spring注入,在自己定义的监听器类里使用了
// @Resource
private IUserManage userManage;
注解的方式,但是spring的注入是在filter和listener之后的,(顺序是这样的listener >> filter >> servlet >> spring )
因此,在监听器类里面使用spring注入是不行的,需要写这样一段代码:
private IUserManage userManage;
ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
userManage=(IUserManage) ctx.getBean("userManageImp");
通过这种方式来获得service层的实例,而web.xml配置文件照旧即可。
同样的,推测自己写filter也是一样的,不过没有经过验证,仅供参考。