我有以下配置:
@Configuration
@ComponentScan("com.xyz.svc")
public class SvcConfig {
@Autowired private Filter filter1;
@Autowired private Filter filter2;
@Autowired private Filter filter3;
@Bean
public List<Filter> filters() {
// Filters are added in the desired order of execution
return ImmutableList.of(
filter1,
filter2,
filter3);
}
}
运行leadFilters()
方法时,它所依赖的所有组件(即filter1
,filter2
,filter3
)都为空。基本上,这些组件是通过@ComponentScan
注册的。问题是leadFilters()
方法在@ComponentScan
之前执行。
我如何使这项工作?
答案 0 :(得分:1)
基本上,你无法可靠。 @Configuration
类是@Component
,用于通过@Bean
带注释的方法注册bean定义。如果bean的请求(通过@Bean
方法处理)在处理BeanPostProcessor
的{{1}}之前进入,那么您将看到您正在描述的行为。
请注意,以下内容会导致您出现问题,因为Spring无法知道要注射哪些内容。
@Autowired
假设这只是一个示例,您可以重构,以便为这些过滤器设置@Autowired
private Filter filter1;
@Autowired
private Filter filter2;
@Autowired
private Filter filter3;
类,而是为它们声明@Component
方法。
@Bean
然后,您可以在其他@Bean
public Filter filter1() {
return new FilterImpl1();
}
@Bean
public Filter filter2() {
return new FilterImpl2();
}
@Bean
public Filter filter3() {
return new FilterImpl3();
}
方法
@Bean