java – Spring / DI:子类中的构造函数注入
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Spring / DI:子类中的构造函数注入,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1362字,纯文字阅读大概需要2分钟。
内容图文
![java – Spring / DI:子类中的构造函数注入](/upload/InfoBanner/zyjiaocheng/781/ccd5f94f905e4ff4bb675b625f9679af.jpg)
我有一个带有构造函数注入依赖项的父类:
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或field injection来做到这一点.
是否有更清晰的模式来执行此依赖注入,或者这是必须使用field / setter注入的情况,即使建议使用构造函数注入?
谢谢!
解决方法:
它不是Spring问题,而是Java.尝试删除子类构造函数,看看自己会发生什么 – 您的代码不应该编译.见this答案,之前有人介绍过.
回答关于依赖注入的问题,是的,@ Autowired适用于父类中的setter,但只要你不在子类中覆盖它(试一试).原因是Spring处理对象而不是类,因此当子类被实例化时,Spring不会检查父类中重写方法的注释,除非注释标记为@Inherited(@Autowired不是).
所以,你要么必须为每个子类使用@Autowired(实际上我认为这不是一个大问题),切换到setter注入,用委托替换子类,或者使父类抽象,并且只在子类中使用构造函数注入.
内容总结
以上是互联网集市为您收集整理的java – Spring / DI:子类中的构造函数注入全部内容,希望文章能够帮你解决java – Spring / DI:子类中的构造函数注入所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。