如何在Spring中从另一个模块添加Bean依赖关系?

Oleksandr:

我有两个模块: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如果没有module2那么secondBean 应在标准流程进行初始化

是否可以在Spring中进行配置?

PS我需要控制被初始化的顺序。我知道有一个特殊的批注@DependsOn可用于设置间接依赖关系,但是在我的情况下,secondBean由于依赖关系beanForModule2是可选的并且位于另一个模块中因此无法使用它

Oleksandr:

使用找到了解决方案BeanFactoryPostProcessor我们需要定义我们的自定义BeanFactoryPostProcessor并在其中设置必要的依赖项。在调用postProcessBeanFactory方法之前,Spring不会执行bean初始化
为了解决上述问题,我们应该BeanFactoryPostProcessor像这样定义我们的自定义

public class JBCDependencyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {

        BeanDefinition beanDefinition = beanFactory.getBeanDefinition("secondBean");
        beanDefinition.setDependsOn("beanForModule2");
    }

}

之后,我们应该用制作一个静态 bean BeanFactoryPostProcessor像这样:

@Configuration
public class ConfigurationInModule2 {

    @Bean
    public static BeanFactoryPostProcessor dependencyBeanFactoryPostProcessor() {
        return new JBCDependencyBeanFactoryPostProcessor();
    }

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

春天会搜索所有的豆子。然后它将postProcessBeanFactory在我们的程序中执行BeanFactoryPostProcessor我们将建立一个从secondBean的依赖关系beanForModule2,然后spring将通过遵循我们的依赖关系来调用bean初始化。

PS感谢@Tarun共享链接。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

带有Maven的多模块IntelliJ项目-如何将一个模块的依赖关系添加到另一个模块?

如何在另一个recyclerView中添加一个recyclerView

如何使一个Maven模块依赖于另一个?

在Spring 3.0中如何将属性从一个bean注入另一个bean?

如何从另一个模块访问Spring Boot Quartz Bean?

在Maven多模块项目中,如何从一个模块到另一个模块访问spring bean

如何在另一个项目中向Spring Boot Jar添加依赖项?

如何在Spring中在一个bean之后但另一个bean之前运行方法?

如何在另一个环境模块中包含环境模块声明?

Gradle-将依赖项添加到另一个模块的测试中

如何在另一个模块的对象中更改模块变量的值?

如何在JavaScript中的另一个对象内添加一个对象?

当一个模块位于另一个模块的父目录中时,如果模块之间存在循环依赖关系,则导入的模块未定义

Maven:如何管理从一个子模块到另一个子模块的依赖关系

如何在entryComponents另一个模块中使用模块中的组件?

如何在字典中的另一个值旁边添加一个值?

Angular 7/8,1依赖关系正在干扰另一个依赖关系,如何避免在使用深度依赖关系的模块内部加载深度依赖关系?或嵌入

Android功能模块对另一个模块的依赖关系找不到资源

如何在Webapi dotnet 3中使用IdentityUser将一个多对多关系添加到另一个实体

如何在Verilog中检查模块中的值与另一个模块中的值

将模块添加为另一个模块的依赖关系是一个好习惯吗?

如何在gradle中将本地jar依赖项添加到另一个依赖项中?

如何在另一个模块上添加运行时依赖项?

如何在Android的另一个模块中访问一个模块的视图?

如何在 spring mvc 中将一个 bean 自动装配到另一个 bean

如何在VB Excel中从另一个模块调用一个模块中的变量

如何在 npm 包中添加依赖项以下载另一个 npm 包?

如何添加另一个 RSU 子模块?

如何将带有@SpringBootApplication 的 Maven 模块作为测试范围中的依赖项添加到另一个 Maven 模块