2016-03-25 13 views
0

私は、コンストラクタを使ってクラス内のメンバをautowireしようとしています。Spring:autowiring中に異なる修飾子を持つ重複したコンストラクタを持つことは可能ですか?

@Component 
public class MyClass { 
    private ClassA myMember; 

    @Autowire 
    public MyClass(ClassA objectA) { 

     myMember = objectA; 
    } 
} 

私はにClassAの豆を作成するには、複数の情報源を持っている場合、それはこのクラスにautowiredた豆に基づいてインスタンス化し、重複コンストラクタの定義を持つことは可能でしょうか?

私はこのような何かをしたい:

@Component 
    public class MyClass { 
     private ClassA myMember; 

     @Autowire 
     public MyClass(@Qualifier ("qualifierA") ClassA objectA) { 

      myMember = objectA; 
     } 

     @Autowire 
     public MyClass(@Qualifier ("qualifierB") ClassA objectB) { 

      myMember = objectB; 
     } 
    } 

私は@Qualifierをこのように使用してみましたが、それは動作しませんでした。 私はSpringで何をしようとしているのですか? Bean定義がようであればどのように私は、名前(​​)または(qualifierB)に基づいて明確にすることができます

@Bean (name = "qualifierA") 
public ClassA getQualifierA() { 
    ... 
} 

@Bean (name = "qualifierB") 
public ClassA getQualifierB() { 
    ... 
} 
+0

あなたは '@Autowired @Qualifier( "qualifierA")'と '@Autowired @Qualifierに注釈を付けてみました:これらのシナリオについて、あなたは(あなたがすることはできません)オートワイヤリングを使用しますが、単に明示的な配線を使用しないでください ( "qualifierB") '? –

+0

はい、それでもうまくいきませんでした。 – c3p0

+0

なぜ2つの異なるコンストラクタで1つのフィールドを自動配線しようとしていますか? 1つのフィールドはどのように2つの異なる値を持つことができますか –

答えて

0

あなたはJavaで単一のクラスでまったく同じシグネチャを持つ2つのコンストラクタを持つことはできません。私が今までに遭遇した他のプログラミング言語もありません。代わりにmethod-injectionを使用することができます。もちろん、別の名前のメソッドを2つ使用して、@Autowired(required = false)とマークし、適切な@Qualifier(...)を使用して注入するインスタンスを指定します。両方のインスタンスがSpringのコンテキストに存在する場合は、予期しないことが起こらないようにケースを処理することができます。

0

短い答えは:いいえ、それはできません。 Javaでは、まったく同じシグネチャを持つコンストラクタを2つ持つことはできません。また、「myMember」には1つの値だけを割り当てることができます。

ただし、ここで何を達成しようとしていますか? MyClassは "objectA"を使用する必要があり、他の場面では "objectB"が必要な場合もあります。

@Bean 
MyClass myObject() { 
    return new MyClass(qualifierA()); 
} 
関連する問題