我正在注册的 Spring Boot (2.0.1) 应用程序中有一个 Servlet 过滤器FilterRegistrationBean,我需要它在过滤器链中首先执行(一个顺序)。应用程序部署到JBoss 7.2。这个过滤器也有一个注入的依赖项@Autowired(见下文):
package my.pkg.com
@SpringBootApplication
@ComponentScan(basePackages={"my.pkg.com"})
public class MyApp extends SpringBootServletInitializer {
public satic void main(String[] args) throws IOException {
SpringApplication.run(MyApp.class, args);
}
@Bean
@Order(1)
public FilterRegistrationBean<MyFilter> myFilter() {
FilterRegistrationBean<MyFilter> contextFilter = new FilterRegistrationBean<>();
contextFilter.setFilter(new MyFilter());
contextFilter.addUrlPattern("/api/*");
return contextFilter;
}
}
package my.pkg.com.filter
public class MyFilter extends Filter {
@Autowired
private MyService mySrv;
@Override
public void doFilter(…) {
mySrv.doSomething(); // mySrv is null
}
}
问题是当应用程序部署和运行时,当 Servlet 请求到达时MyFilter.doFilter(),mySrv为 null,这意味着MyFilter从未扫描过依赖注入。
我可以通过调试验证MyService哪个@Repositoryinmy.package.com.repository包确实被初始化了。它永远不会被注入到MyFilter.
MyFilter我可以为take创建一个构造函数MyService,然后@Autowired MyService在MyApp过滤器注册期间,我可以将它传递给这个构造函数,这样就解决了这个问题。
MyFilter但是,我想知道是否有什么我做错了,因为单独使用上面的设置没有注入这种依赖性。
慕田峪9158850
慕虎7371278
相关分类