【发布时间】:2017-03-29 06:39:03
【问题描述】:
我有一个带有构造函数注入依赖项的父类:
class ParentClass {
private final MyService service;
@Autowired
ParentClass(MyService service) {
this.service=service;
}
// ...
}
如果我从这个类继承,我是否总是需要重新定义一个调用父构造函数的构造函数?
class ChildClass extends ParentClass {
// Do I really need this?
@Autowired
ChildClass(MyService service) {
super(service);
}
// ...
}
使用 setter 注入,我似乎能够将依赖项保留在父类中,并且不需要在子类中重新连接它,如果子类不触及与依赖项相关的功能,这对我来说听起来不错:
class ParentClass {
private MyService service;
@Autowired
void setMyService(MyService service) {
this.service=service;
}
// ...
}
class ChildClass extends ParentClass {
// ...
}
看来,如果我想避免重复自动装配代码并处理子项中的依赖关系,我只能使用 setter 或字段注入来做到这一点。
是否有更简洁的模式来执行这种依赖注入,或者这是必须使用字段/设置器注入的情况,即使建议使用构造函数注入?
谢谢!
【问题讨论】:
-
在纯 java 中,如果你有一个带有非默认构造函数(无参数构造函数)的父类,在你的子类中你必须重新定义一个调用非默认父构造函数的构造函数。所以它与你关于构造函数的问题有关,Spring/DI 与它无关。
-
谢谢。我的问题是关于 DI 问题。为了清楚起见,我对其进行了编辑。
-
此刻你也在问“如果我从这个类继承,我是否总是需要重新定义一个调用父构造函数的构造函数?”。也许您应该编辑您的问题,因为目前答案是肯定的,您必须这样做,而且与 DI 无关
-
更新了我的答案,请看一下
标签: java spring dependency-injection