gpt4 book ai didi

java - 如何在 Spring 中添加来自另一个模块的 bean 依赖项?

转载 作者:行者123 更新时间:2023-12-02 01:39:21 24 4
gpt4 key购买 nike

我有两个模块:module1module2
module2 依赖于 module1

module1中的配置:

@Configuration
public class ConfigurationInModule1 {

@Bean
public FirstBean firstBean() {
return new FirstBean();
}

@Bean
public SecondBean secondBean(FirstBean firstBean) {
return new SecondBean(firstBean);
}
}

module2中的配置:

@Configuration
public class ConfigurationInModule2 {

@Bean
public SomeBeanForModule2 beanForModule2(FirstBean firstBean) {
return new SomeBeanForModule2(firstBean);
}
}

如您所见,bean secondBeanbeanForModule2 都依赖于 firstBean。我需要确保当使用 module2 编译项目时,beanForModule2 应在 secondBean 之前初始化。如果没有 module2secondBean 应该在标准流程中初始化

是否可以在Spring中配置它?

附注我需要控制初始化的顺序。我知道有一个特殊的注释 @DependsOn 可用于设置间接依赖项,但在我的情况下,我无法在 secondBean 上使用它,因为依赖项 beanForModule2 是可选的,放置在另一个模块中。

最佳答案

Spring 负责 bean 初始化的顺序,因此如果一个 bean 依赖于其他 bean,那么 Spring 将首先初始化依赖项 Bean,然后再初始化依赖项 Bean。
在您的情况下,FirstBean 将始终在 SomeBeanForModule2 之前初始化,无需任何其他配置。

如果您的情况下是 FirstBean 的依赖 Bean 未声明(即 module1 不存在),那么 Spring 将抛出 org.springframework.beans.factory.NoSuchBeanDefinitionException 。所以 module2 不能在没有 module1 的情况下初始化。

编辑:-对于 Bean 初始化的顺序,即使 Bean 位于单独的文件中,您也可以使用 @DependsOn。

只需在 module1 的 ConfigurationInModule1 类中添加 @import(ConfigurationInModule2.class) 即可。
并在第二个Bean上使用@DependsOn("beanForModule2")

这将有帮助:- https://stackoverflow.com/a/16297827/4720870

关于java - 如何在 Spring 中添加来自另一个模块的 bean 依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54665544/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com