我在自定义过滤器类中使用@Autowire。我遇到空指针异常。
@Autowire 在过滤器中起作用吗?
这是代码:
public class MyFilter extends CustomFilter {
@Autowire
public MyClass myClass;
@Override
public String getInfo(){
return myClass.getMessage();
}
}
这就是我在配置类中注册 bean 的方式
@Configuration
public class ConfigLoader{
@Bean
public FilterRegistrationBean myFilterBean() {
final FilterRegistrationBean filterBean = new FilterRegistrationBean();
filterBean.setFilter(new MyFilter());
filterBean.addUrlPatterns("/*");
return filterBean;
}
}
自定义过滤器:
public abstract class CustomFilter implements Filter {
public FilterConfig getFilterConfig() {
return this.filterConfig;
}
public void setFilterConfig(FilterConfig filterConfig) {
this.filterConfig = filterConfig;
}
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
throws IOException, ServletException {
chain.doFilter(req, resp);
this.clearContext();
}
protected abstract String getInfo();
}
最佳答案
向过滤器类添加@Component
注释。
@Component
public class MyFilter extends CustomFilter {
...
让 Spring 创建过滤器 bean 并在配置中 Autowiring 它:
@Configuration
public class ConfigLoader{
@Autowired
private MyFilter myFilter;
@Bean
public FilterRegistrationBean myFilterBean() {
final FilterRegistrationBean filterBean = new FilterRegistrationBean();
filterBean.setFilter(myFilter);
filterBean.addUrlPatterns("/*");
return filterBean;
}
}
关于java - 我可以在自定义过滤器中使用@Autowired吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53268071/