java - Spring 中抽象类的构造函数依赖注入(inject)

标签 java spring spring-boot spring-mvc

我想在我的应用程序中使用构造函数依赖注入(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

最佳答案

AppErrorControllerBonanzaCloudController 的子类,因此 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/

相关文章:

java - 在 Spring Boot 中定义 beans 有什么意义?

java - JPA 事件监听器

java - Java BigDecimal 与 The Financial Mans - "The 1 cent problem"

java - 了解 Spring @Autowired 的用法

java - 枚举设计决策的常量特定方法

Spring 更新调度程序

java - 如何在 Zookeepr 中模拟获取锁的 void 方法,并且我们还可以验证锁

java - 从 Java 访问 HTML DOM 元素

java - 如何在Hibernate中定义非生成的主键字段

java - 使用按钮更改 Jframe 的高度