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)は null になります。基本的に、これらのコンポーネントは を通じて登録されます。問題は、メソッドが の前に実行されることです。filter2filter3@ComponentScanleadFilters()@ComponentScan

どうすればこれを機能させることができますか?

4

1 に答える 1

2

基本的に、確実にできません。@Configurationクラスは、アノテーション付きメソッド@Componentを介して Bean 定義を登録するためのものです。Bean (メソッド@Beanを介して処理される) の要求が、その handlesの前に到着した場合、記述している動作が表示されます。@BeanBeanPostProcessor@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 に答える