2017-11-23 2 views
0

を適切なサービスの実装を注入:春 - 私は2クラス階層を持つ抽象クラスレベルautowiredフィールドに

* ClassA 
    * ClassB 

* AbstractClass 
    * Class1 
    * ... 
    * Class5 

AbstractClass autowiresをClassA次のように:

public abstract class AbstractClass { 

    @Autowired 
    protected ClassA classA; 
} 

今、私はClass1ClassAを注入したいと思います、..、Class4の実装ですが、ClassBClass5です。私は、抽象クラスではなくクラスを実装することで直接行うことができることを認識していますが(Similar Questionなど)、同じフィールドを1回ではなく5回宣言しなければならないということです。さらに抽象クラスでこのフィールドを使用する場合は、クラスを実装する際にgetterを作成して、そのサービスを取得する必要があります。それは動作しますが、それを行うには正しい方法が好きではないようです。

+0

を使用して抽象クラスで、子クラスでそれらを修飾する場合は、共通のプロパティとメソッドを持っていることができますです子クラス – 11thdimension

+0

例を回答として表示できますか?だからうまくいくなら私はそれを受け入れることができますか? – Dcortez

答えて

1

ここでそれを

@Component 
class ClassA {} 

@Component 
class ClassB extends ClassA {} 

abstract class AbstractClass { 
    protected ClassA classA; 
} 

@Component 
class Class1 extends AbstractClass { 
    public Class1(ClassA classA) { 
     this.classA = classA; 
    } 
} 
//... Same for Class2/3/4 

@Component 
class Class5 extends AbstractClass { 
    public Class5(ClassB classB) { 
     this.classA = classB; 
    } 
} 

を行うための一つの方法は、これはあなたがでコンストラクタ・インジェクションを使用することができますコンストラクタ・インジェクション

+0

間違いなく見栄えが良く、上層階のサービスに直接アクセスできます。手伝ってくれてありがとう! – Dcortez

+0

あなたは大歓迎です! – 11thdimension

関連する問題