2017-04-21 8 views
0

私はいくつかのスプリングコードを書くときに、クラスとアノテーション設定でスプリング4を使用しています。私は、Beanがコンポーネントをインターフェースとして実装していると宣言しています。そして、私は別のBeanを作成してインターフェース時間に合わせようとしています。しかし、春はその名前にBeanが見つからないのでエラーが発生するため、動作しません。私は、それがコンセプトクラスの自動車ワイヤでのみ動作することに依存するかもしれないと思うが、なぜこのように設定するのか分からないのだろうか?なぜアノテーションに依存しているのか説明できる人は、インタフェースへのタイプ自動配線を許さないのですか?なぜSpring DependsOnアノテーションはインターフェイスの自動ワイヤリングに使用できない

簡単なサンプルコードでは、私は、フィールドまたはコンストラクタに@Autowiredのいずれかを使用し、シンプルなオートワイヤリングについて@DependsOn("A")

+0

私の知る限り、 '@ DependsOn'は何もautowireしません。あなたは何をしようとしているのかを明確にすることができますか? – CollinD

+0

'DependsOn'は型にない名前に作用するためです。 –

+0

ご協力いただきありがとうございます。いくつかの検索をした後、dependsOnはクラスでしか作業していないことがわかりました。 dependsOnを使うとき、Springはそのクラスをインスタンス化しなければならないので、コードにclassIdを与える必要があります。 – Liyuan

答えて

0

使用すべきではありません。これが必要な場合は、おそらく何か間違っているか、極端なコーナーケースがあります。私は2006年からSpringを使用しており、まだそれを必要としていません。

のJavaDocは、Bean *が明示的に、プロパティやコンストラクタ引数を介して、他に依存 *ではなく、別のBeanの初期の副作用に依存しません。場合によっては使用頻度の低い

を語ります

これは基本的には、あなたまたは他の人が悪いコードを書いた場合にのみDependsOnを使用することを意味します。たとえば、あるBeanコンストラクタは、構築時に別のBeanが必要とするディスク上のリソースを作成します。スプリングIoCコンテナと宣言的な配線により、Bean間の依存関係を制御できますが、レガシーコードに宣言されていない依存関係がある非常にまれなケースでは、DependsOnは関連のない春のBeanが構築されます。

0

@DependsOn("B")を変更しない限り、上記のコードは動作しないことができる。この

@Component 
class A implement B{ 
} 

@Component 
@DependsOn("B") 
class C { 
} 

のようなものです。 Spring 4.3以降、ctor注入を使用する場合は@Autowiredを省略することができます。一般DependsOn

@Component 
class A implement B { 
} 

@Component 
class C { 
    private final B b; 

    public C(B b) { 
     this.b = b; 
    } 
} 
関連する問題