Как `@ Autowired` не является классом Spring или создан новым X ()? - PullRequest
0 голосов
/ 28 мая 2018

Мне нужно автоматически подключить @Service внутри javax.servlet.Filter.

public class CORSFilter implements Filter {

    @Autowired
    AccessLogService accessLogService;

    public void setAccessLogService(AccessLogService accessLogService) {
        this.accessLogService = accessLogService;
    }

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        // save an access log to the database...

        AccessLogDTO rld = new AccessLogDTO( req );
        accessLogService.addAccessLog( rld );   // <<<--- NPE here! 

        // and do other stuff not related to the question...

    }

}

, но я получаю ошибку NullPointerException.

@Service
public class AccessLogServiceImpl implements AccessLogService {
  // ordinary not special service class.
}

1 Ответ

0 голосов
/ 28 мая 2018

Мы не можем использовать внедрение зависимостей непосредственно из фильтра.Хотя вы используете GenericFilterBean, ваш фильтр сервлетов не управляется пружиной.

Удалите @Autowired.

AccessLogService accessLogService;

и создайте экземпляр класса обслуживания в методе doFilter.

if(accessLogService==null){
            ServletContext servletContext = request.getServletContext();
            WebApplicationContext webApplicationContext = WebApplicationContextUtils.getWebApplicationContext(servletContext);
            service = webApplicationContext.getBean(AccessLogService.class);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...