Java的监听器众多,我们可以通过实现不通的接口创建监听器。
说到监听器,那我们就不可避免的须在监听器里面实现某些功能,这些功能基本上都是和数据库相关的。
根据我们之前的项目经验,基本上都是系统化的,创建controller,mapper,service等等来实现。(采用SpringMVC+mybatis)
像我们在Controller里面都是通过注解类调用Service进而调用mapper.xml文件来对数据库数据进行处理。
但是在Listener里面就不可以了。
下面是我在网上搜的原因:
因为监听器属于sevlet容器,不属于 Spring 框架的管理范围,所以如果期望监听器中直接使用 @Resource 等注解加载 service 的做法是错误,包 null 指针异常,
(说明:原因是不是这样我不清楚,但是我确实尝试过,使用注解确实是空指针异常,得不到service对象)
我在网上搜了好几种方法:
1.WebApplicationContext webApplicationContext = WebApplicationContextUtils.getWebApplicationContext(
servletContextEvent.getServletContext());
xxxService = (XxxService)webApplicationContext.getBean("xxxService");//这块是service注解的名字
我不知道说这种方法的人尝试过的结果如何,但是我自己试过之后发现还是空指针异常。
2.
ApplicationContext context=new ClassPathXmlApplicationContext("classpath:spring/spring-*.xml"); xxxService = (XxxService)context.getBean("xxxService"); 说明:上面的classpath:spring/spring-*.xml,是我在web.xml里面配置spring的路径<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/spring-*.xml</param-value> </context-param> 通过试验证明,这种方法可以获取service对象,不过需要先把spring配置先加载一遍。