java - 依赖注入(inject)和@DependsOn之间的区别

标签 java spring spring-boot dependency-injection dependencies

我们在项目中使用了 Spring,今天我发现了一种奇怪的行为。在我看来,在以下两种情况下,依赖注入(inject)和注释 @DependsOn 应该是相同的

@Bean
public ClassA classA(){
    //code
}

@Bean
public ClassB classB(ClassA classA){
    someMethodWhichNeedsClassA()
}

@Bean
public ClassA classA(){
    //code
}

@Bean
@DependsOn("classA")
public ClassB classB(){
    someMethodWhichNeedsClassA()
}

看来,这两种方式并不相同。我不允许共享我的代码,但在第一种情况下,我可以访问第一个 Bean 中填充的列表,但在第二种情况下则不能。 我试图在文档或其他博客中找到一些内容,但没有成功。

有谁知道这两种方式之间是否有任何差异,因为我认为这与 bean 创建的顺序有关,仅此而已。

感谢您的帮助

最佳答案

默认情况下,Spring 管理 bean 的生命周期并安排它们的初始化顺序。您的第一个示例就是这种情况。而在第二个示例中,您告诉 Spring bean B 依赖于 A。因此 spring 将在 bean B 之前创建 bean A。

@DependsOn from spring docs:

Beans on which the current bean depends. Any beans specified are guaranteed to be created by the container before this bean. Used infrequently in cases where a bean does not explicitly depend on another through properties or constructor arguments, but rather depends on the side effects of another bean's initialization.

Baeldung spring DependsOn

关于java - 依赖注入(inject)和@DependsOn之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59830580/

相关文章:

Java:JScrollPane 不适用于 GridBagLayout

spring - 升级到 4.1.4.RELEASE 后,在上下文创建时错误地创建了原型(prototype)范围的 Spring bean

spring - 如何在 Spring MVC Controller 中应用 Spring Data 投影?

java - Spring的QueryByExampleExecutor可以与Projections一起使用吗

java - 带选择的 CriteriaBuilder 不允许没有构造函数

java - 使用可选参数在 HQL 中动态搜索查询?

java - 在 NetBeans 中运行 Maven 目标的按钮

java - Autowiring 定义为 <util :set> in Spring 的集合

java - 在同一个项目中使用jpa存储库和hibernate(使用标准,HQL调用查询)可以吗

java - Spring + Thymeleaf 绑定(bind)形成 NullpointerException