1

我有以下配置:

@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,,filter2filter3都为空。基本上,这些组件都是通过@ComponentScan. 问题是leadFilters()方法在之前执行@ComponentScan

我该如何进行这项工作?

4

1 回答 1

2

基本上,你不能,可靠。类@Configuration是一个@Component旨在通过@Bean注释方法注册 bean 定义的类。如果对 bean 的请求(通过@Bean方法处理)在BeanPostProcessorthat handles之前进入@Autowired,那么您将看到您所描述的行为。

请注意,以下内容会导致您出现问题,因为 Spring 不知道要注入哪个。

@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方法中使用这些 bean

@Bean
public List<Filter> filters() {
    // Filters are added in the desired order of execution
    return ImmutableList.of(
            filter1(),
            filter2(),
            filter3());
}
于 2014-03-22T06:00:05.633 回答