Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring-在抽象类级自动连接字段中注入适当的服务实现_Java_Spring_Inheritance_Dependency Injection - Fatal编程技术网

Java Spring-在抽象类级自动连接字段中注入适当的服务实现

Java Spring-在抽象类级自动连接字段中注入适当的服务实现,java,spring,inheritance,dependency-injection,Java,Spring,Inheritance,Dependency Injection,我有两个类层次结构: * ClassA * ClassB * AbstractClass * Class1 * ... * Class5 AbstractClass自动连接ClassA,如下所示: 公共抽象类AbstractClass{ @自动连线 受保护的A类; } 现在我想将ClassA注入Class1,…,Class4实现,但将ClassB注入Class5。我知道我可以通过在实现类中直接注入而不是像在中那样在抽象类中注入来实现这一点,但这意味着我必须声明同一个字段,不是

我有两个类层次结构:

* ClassA
  * ClassB

* AbstractClass
  * Class1
  * ...
  * Class5
AbstractClass自动连接ClassA,如下所示:

公共抽象类AbstractClass{ @自动连线 受保护的A类; }
现在我想将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;
    }
}

这使您可以在抽象类中拥有公共属性和方法,如果使用构造函数注入在子类中对它们进行限定

您可以在子类中使用构造函数注入您可以给出示例作为答案吗?因此,如果它起作用,我可以接受它?肯定看起来更好,并允许直接访问上层阶级的服务。谢谢你的帮助!