我想在我的应用程序中使用构造函数依赖注入(inject)。
我创建了这个 Controller :
public abstract class BonanzaCloudController {
protected final UserService userService;
protected BonanzaCloudController(UserService userService) {
this.userService = userService;
}
...
}
还有这个
@Controller
public class AppErrorController extends BonanzaCloudController implements ErrorController {
private final ErrorAttributes errorAttributes;
private final EmailService emailService;
public AppErrorController(ErrorAttributes errorAttributes, EmailService emailService) {
this.errorAttributes = errorAttributes;
this.emailService = emailService;
}
...
}
但是我有这个编译错误:
There is no default constructor available in BonanzaCloudController
最佳答案
AppErrorController
是 BonanzaCloudController
的子类,因此 AppErrorController
的构造函数必须调用 BonanzaCloudController
的构造函数(按照java定义的规则)。
因此 AppErrorController
的构造函数必须是
public AppErrorController(UserService userService, ErrorAttributes errorAttributes, EmailService emailService) {
super(userService);
this.errorAttributes = errorAttributes;
this.emailService = emailService;
}
虽然 userService
不必是第一个参数,但只有 super()
调用必须是第一个。
关于java - Spring 中抽象类的构造函数依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58900997/