sha*_*enR 6 java spring dependency-injection spring-boot spring-config
我当时正在做一个关于 Spring Boot 1.5 的项目。它具有以下类型的配置类:
@Configurtion
public class Foo{
@Autowired
private DependencyA dependencyA;
@Bean
public DependencyA getDependency(){
return new DependencyAImpl();
}
}
Run Code Online (Sandbox Code Playgroud)
这在 Spring Boot 1.5 中工作得很好,但是当我升级到 Spring Boot 2 时,这不再工作,应用程序将无法启动,并出现异常“找不到 DependencyA 类型的 bean”。我认为这可能是因为 Spring 尝试注入依赖项时未创建 bean,因此,作为“黑客”,将 @Lazy 添加到 dependencyA 注入中。这有效。
鉴于此,配置类的执行顺序是怎样的?是:A)首先创建bean,然后注入依赖项B)尝试创建具有所有依赖项的实例,然后在配置中创建任何bean。
有趣的发现;
配置类也是一个 Spring Bean。
通常,配置类首先被扫描并实例化。这必须是了解其他配置和 bean 的起点。
但是您已经添加了 @Autowire 来进行字段注入。正如我所说,配置类也是一个 Spring Bean。因此spring需要首先解决它的依赖关系。并陷入僵局。
来回答你的问题。配置类首先实例化,然后再实例化其他 Bean。
| 归档时间: |
|
| 查看次数: |
2430 次 |
| 最近记录: |