首页 > 解决方案 > 注入依赖spring的propleme

问题描述

对于我们在组建期间创建的项目,我们使用 spring 进行依赖注入。

我们有一个 servlet-context.xml 文件,其配置如下:

<context:component-scan base-package="fr.autoquiz3000" />

我创建了几个控制器,注入 dao 没有问题,例如:

package fr.autoquiz3000;

@Controller
@RequestMapping("/public")
public class PublicController {

    @Autowired
    private UserDao uDao;

    @GetMapping("/connection")
    public ModelAndView getConnection() {
        return new ModelAndView("public/viewConnexion");
    }

但我尝试使用这样的 dao 创建一个过滤器:

package fr.autoquiz3000;

@Component
public class CountQuizStudent implements Filter {

    @Autowired
    private QuizToDoDao qtdDao;

我有这个错误:

qtdDao= null
java.lang.NullPointerException
at fr.autoquiz3000.CountQuizStudent.doFilter(CountQuizStudent.java:41)

有人可以向我解释我做错了什么!

谢谢你!

标签: spring

解决方案


对于过滤器覆盖 init 方法并在那里设置 Spring bean:

@Override
public void init(FilterConfig filterConfig) throws ServletException {
    WebApplicationContext springContext =
        WebApplicationContextUtils.getWebApplicationContext(filterConfig.getServletContext());
    userDao = springContext.getBean(UserDao.class);
}

或使用 DelegatingFilterProxy:

<filter>
    <filter-name>yourFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
    <filter-name>yourFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>


@Component("yourFilter")
public class YourFilter implements Filter { 
    // auto wiring available as it's just Spring Bean
}

推荐阅读