【发布时间】:2019-04-02 15:23:53
【问题描述】:
我有一堂课如下
@Component
public abstract class NotificationCenter {
protected final EmailService emailService;
protected final Logger log = LoggerFactory.getLogger(getClass());
protected NotificationCenter(EmailService emailService) {
this.emailService = emailService;
}
protected void notifyOverEmail(String email, String message) {
//do some work
emailService.send(email, message);
}
}
EmailService 是 @Service,应该通过构造函数注入自动连接。
现在我有一个扩展 NotificationCenter 的类,还应该自动连接组件
@Service
public class NotificationCenterA extends NotificationCenter {
private final TemplateBuildingService templateBuildingService;
public NotificationCenterA(TemplateBuildingService templateBuildingService) {
this.templateBuildingService = templateBuildingService;
}
}
基于上面的示例,代码不会编译,因为抽象类 NotificationCenter 中没有默认构造函数,除非我将 super(emailService); 作为第一条语句添加到 NotificationCenterA 构造函数但我没有实例emailService 中的一个,并且我不打算从孩子中填充基本字段。
知道处理这种情况的正确方法是什么吗?也许我应该使用场注入?
【问题讨论】:
-
两者都需要,对吧?注入
EmailService和TemplateBuildingService的兼容实例,然后为EmailService调用super。我没有看到任何其他方式。
标签: java spring spring-mvc spring-boot dependency-injection