這個問題在這里已經有了答案: 為什么我的 Spring @Autowired 欄位為空? (21 個回答) 3天前關閉。
如果使用 FilterRegistrationBean,為什么 Autowired 不能在 Filter 內部作業?如果我評論 @Bean 然后 @Autowired 作業。到底是怎么回事?我應該如何更改我的代碼?
@Component
public class MyFilter1 extends OncePerRequestFilter {
//PROPERTIES
@Autowired MyService myService;
//===================================================================
// DO FILTER INTERNAL
//===================================================================
@Override
public void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws IOException, ServletException {
//MyService myService = new MyService();
System.out.println("myService = " myService);
String result = myService.hello(); //Null Pointer Exception when using @Bean
System.out.println(result);
chain.doFilter(request, response);
}
//===================================================================
// FILTER REGISTRATION BEAN
//===================================================================
@Bean
public FilterRegistrationBean<MyFilter1> regFilter1(){
//CREATE REGISTRATION BEAN
FilterRegistrationBean<MyFilter1> registrationBean = new FilterRegistrationBean<>();
registrationBean.setFilter(new MyFilter1());
//RETURN REGISTRATION BEAN
return registrationBean;
}
}
uj5u.com熱心網友回復:
當您new啟動 MyFilter1 的實體時,您會繞過 Spring,因此自動裝配將不起作用。修改 FilterConfiguration 類,如下所示:
@Configuration
public class FilterConfiguration {
@Bean
public FilterRegistrationBean<MyFilter1> regFilter1(MyFilter1 myFilter){
FilterRegistrationBean<MyFilter1> registrationBean = new FilterRegistrationBean<>();
registrationBean.setFilter(myFilter);
registrationBean.addUrlPatterns("/Filtered");
registrationBean.setOrder(0);
return registrationBean;
}
}
uj5u.com熱心網友回復:
謝謝您的回答。我已將@Bean 移到組態檔中,但問題仍然存在。我使用 FilterRegistrationBean 的原因是能夠使用 addUrlPatterns("/Filtered") ,這不能僅使用注釋來完成。
@Configuration
public class FilterConfiguration {
//===================================================================
// FILTER REGISTRATION BEAN
//===================================================================
@Bean
public FilterRegistrationBean<MyFilter1> regFilter1(){
//CREATE REGISTRATION BEAN
FilterRegistrationBean<MyFilter1> registrationBean = new FilterRegistrationBean<>();
registrationBean.setFilter(new MyFilter1());
registrationBean.addUrlPatterns("/Filtered"); //Apply to specific URL
registrationBean.setOrder(0); //To order Filters
//RETURN REGISTRATION BEAN
return registrationBean;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/482309.html
