一般我們都是在controller層注入service那么如何在過濾器中注入service呢 一般使用過濾器在啟動類中添加如下代碼
1 @SpringBootApplication 2 @MapperScan("com.cmbchina.ccd.itpm.baffle.dao") 3 4 public class BaffleApplication extends SpringBootServletInitializer { 5 @Override 6 protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { 7 return builder.sources(BaffleApplication.class); 8 } 9 10 public static void main(String[] args) { 11 SpringApplication.run(BaffleApplication.class, args); 12 } 13 //配置過濾器 14 @Bean 15 public FilterRegistrationBean filterRegistrationBean(){ 16 FilterRegistrationBean filterFilterRegistrationBean = new FilterRegistrationBean(new UrlFilter()); 17 filterFilterRegistrationBean.addUrlPatterns("/*"); 18 return filterFilterRegistrationBean; 19 } 20 21 22 }
這樣的話啟動的時候就會加載這個過濾器 要是直接在過濾器中直接@Autowired 會出先空指針的我們可以采用下面的方法
1 @Component 2 public class UrlFilter implements Filter { 3 @Autowired 4 private UrlServicer urlServicer; 5 /* private static Logger logger= LoggerFactory.getLogger(UrlFilter .class);*/ 6 @Override 7 public void init(FilterConfig filterConfig) throws ServletException { 8 ServletContext sc = filterConfig.getServletContext(); 9 WebApplicationContext cxt = WebApplicationContextUtils.getWebApplicationContext(sc); 10 if(cxt != null && cxt.getBean(UrlServicer.class) != null && urlServicer == null) { 11 urlServicer =cxt.getBean(UrlServicer.class); 12 } 13 }
在過濾器加上@Component注解在init方法中初始化你要注入的service就可以了
感謝閱讀