摘自一篇博客的话:
解决的思路:不要在构造方法中调用依赖注入的对象,通过其他方式实现构造方法。
讲人话和举例子(看解决方案可以看后面):
错误的做法
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慢一点再用