Failed to instantiate [xxx]: Constructor threw exception

摘自一篇博客的话:

解决的思路:不要在构造方法中调用依赖注入的对象,通过其他方式实现构造方法。

讲人话和举例子(看解决方案可以看后面):

错误的做法

public class MyService {

    private final DependencyService dependencyService;

    // 构造方法通过依赖注入获得 DependencyService 对象
    public MyService(DependencyService dependencyService) {
        this.dependencyService = dependencyService;

        // 在构造方法中调用依赖注入的对象
        dependencyService.performAction();  // 这是不建议的
    }
}

问题点

在上面的例子中,DependencyService 被注入到 MyService 的构造方法中,并且立即在构造方法中被调用。如果 DependencyService 的依赖还未完全初始化,可能会导致错误或未预期的行为。

正确的做法

public class MyService {

    private final DependencyService dependencyService;

    // 构造方法通过依赖注入获得 DependencyService 对象
    public MyService(DependencyService dependencyService) {
        this.dependencyService = dependencyService;
        // 只做简单的赋值,不调用依赖注入的对象的方法
    }

    // 在需要时调用依赖注入的对象
    public void initialize() {
        dependencyService.performAction();  // 在这里调用依赖的方法
    }
}

说明

在这个正确的做法中,DependencyService 的方法 performAction() 并没有在构造方法中调用,而是在 initialize() 方法中调用。这样可以确保在调用 dependencyService.performAction() 时,所有依赖都已经正确注入并初始化。

我遇到的问题的解决方案

错误做法:

这样在初始化bean的时候可能初始化AliOssUtil了还来不及注入aliOssproperties

正确做法:

所以我们注入了aliOssProperties慢一点再用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值