我在自定义过滤器类中使用@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();
}
答案 0 :(得分:0)
添加@Component
注释以过滤类。
@Component
public class MyFilter extends CustomFilter {
...
让Spring创建过滤器bean并在配置中自动装配它:
@Configuration
public class ConfigLoader{
@Autowired
private MyFilter myFilter;
@Bean
public FilterRegistrationBean myFilterBean() {
final FilterRegistrationBean filterBean = new FilterRegistrationBean();
filterBean.setFilter(myFilter);
filterBean.addUrlPatterns("/*");
return filterBean;
}
}