Spring java config:组件扫描后的bean配置

时间:2014-03-21 23:52:17

标签: spring spring-java-config

我有以下配置:

@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()方法时,它所依赖的所有组件(即filter1filter2filter3)都为空。基本上,这些组件是通过@ComponentScan注册的。问题是leadFilters()方法在@ComponentScan之前执行。

我如何使这项工作?

1 个答案:

答案 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
@Bean