1 问题重现
在做一个小项目,想要在一个普通的动态Web工程中使用Spring,但是在Controller层获取Service层的组件时,抛出了空指针异常。
查询资料发现,普通的动态Web工程中的Servlet、Filter、Listener都不能使用注解获取组件,原因是在WebServer容器中,无论是Servlet,还是Filter或者Listener,这些组件都不是Spring容器管理的,因此不能在这些类中直接使用Spring注解的方式来注入需要的组件。
2 解决办法
改为从Spring的上下文中获取注入的组件:
ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(request.getServletContext());
UserService userService = context.getBean(UserService.class);