18

Spring@Configurationアノテーションを使用してアプリケーションを構成しています。

@Configuration現在、すべての Bean が宣言されている単一のクラスがあります。Bean の数が増えている (30 以上) ので、多くのクラスに分割したいと考えています。

一部の Bean は共通のクラス (主にユーティリティ クラス) を使用しています。

Foo.classはユーティリティ クラス です Bar.classBaz.classは両方とも Foo.class を使用します

私はすべてFoo, Bar and Bazを3つの異なる@Configurationクラスに入れたい(それぞれConf1, Conf2 and Conf3

Conf1問題は、 fromのインスタンスにアクセスできないことですConf2 and Conf3:

Conf1.クラス

@Configuration 
public class Conf1 {
    @Bean
    public Foo foo() {
        return new Foo();
    }
}

Conf2.クラス

@Configuration 
public class Conf2 {
    @Bean
    public Bar bar() {
        Bar bar = new Bar();
        bar.setFoo(conf1.foo()); // Not possible !
        return bar;
    }
}

Conf3.クラス

@Configuration 
public class Conf3 {
    @Bean
    public Baz baz() {
        Baz baz = new Baz();
        baz.setFoo(conf1.foo()); // Not possible !
        return baz;
    }
}

この問題を解決するにはどうすればよいですか?

4

3 に答える 3

21

それらを自動配線できるはずです:

@Configuration 
public class Conf2 {
    @Autowired
    Conf1 conf1;
    ...
}

または、構成ではなく Bean を自動配線できます。

@Configuration 
public class Conf2 {
    @Autowired
    Foo foo;
    ...
}
于 2012-05-22T09:09:12.920 に答える
19
@Configuration
@Import({ DataSourceConfig.class, TransactionConfig.class })
public class AppConfig extends ConfigurationSupport {
      // bean definitions here can reference bean definitions in DataSourceConfig or TransactionConfig
}
于 2016-03-18T11:29:47.163 に答える
4

Spring フレームワークの第 5 章では、非常にうまく説明されています。

  • @ExternalBean : 1 つの構成クラスが、別の構成クラス (または XML で) で定義された Bean を参照する必要がある場合があります。@ExternalBean アノテーションはまさにそのようなメカニズムを提供します。JavaConfig は、@ExternalBean のアノテーションが付けられたメソッドを検出すると、そのメソッド定義を、メソッド名と同じ名前の Bean を囲む Bean ファクトリへのルックアップに置き換えます。

  • @Import : @Import は、XML 構成の要素に相当する JavaConfig の要素を表します。1 つの構成クラスは任意の数の他の構成クラスをインポートでき、それらの Bean 定義はローカルで定義されているかのように処理されます。

  • ConfigurationSupport : 便宜上、 @Configuration クラスは ConfigurationSupport を拡張できます。これは主に、囲んでいる BeanFactory / ApplicationContext から Bean を簡単に検索できるようにするためです。

于 2019-07-22T16:13:46.360 に答える