Reputation: 2529
I'm using @Autowire in custom filter class. I'm getting null pointer exception.
Does @Autowire works in Filter?
here is the code:
public class MyFilter extends CustomFilter {
@Autowire
public MyClass myClass;
@Override
public String getInfo(){
return myClass.getMessage();
}
}
This is how I registered my bean in configuration class
@Configuration
public class ConfigLoader{
@Bean
public FilterRegistrationBean myFilterBean() {
final FilterRegistrationBean filterBean = new FilterRegistrationBean();
filterBean.setFilter(new MyFilter());
filterBean.addUrlPatterns("/*");
return filterBean;
}
}
Custom filter:
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();
}
Upvotes: 5
Views: 8371
Reputation: 3423
Add @Component
annotation to filter class.
@Component
public class MyFilter extends CustomFilter {
...
Let Spring create the filter bean and autowire it in the configuration:
@Configuration
public class ConfigLoader{
@Autowired
private MyFilter myFilter;
@Bean
public FilterRegistrationBean myFilterBean() {
final FilterRegistrationBean filterBean = new FilterRegistrationBean();
filterBean.setFilter(myFilter);
filterBean.addUrlPatterns("/*");
return filterBean;
}
}
Upvotes: 8