繁体   English   中英

Spring-在抽象类级别的自动装配字段中注入适当的服务实现

[英]Spring - Inject proper service implementation in abstract class level autowired field

我有2个班级层次结构:

* ClassA
  * ClassB

* AbstractClass
  * Class1
  * ...
  * Class5

AbstractClass自动连接ClassA如下:

public abstract class AbstractClass {

    @Autowired
    protected ClassA classA;
}

现在,我想将ClassA注入Class1 ,.., Class4实现,但将ClassB注入Class5 我知道我可以通过直接在实现类中而不是抽象类中进行注入来实现这一点(就像在类似问题中那样 ),但这意味着我必须在同一字段中声明一次而不是声明五次。 另外,如果我想在抽象类中使用此字段,则必须在实现类中强制创建getter并使用它来获取该服务。 它有效,但是在我看来,它并不喜欢正确的方法。

这是一种方法

@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;
    }
}

这使您可以在抽象类中拥有通用属性和方法,并使用构造函数注入在子类中对其进行限定

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM