spring - 程序化 Bean 注册

标签 spring spring-integration

我想了解@Bean注释的bean注册的编程等价物是什么

假设我有一堂这样的课:

@Configuration
public class SimpleConfiguration {
    @Bean
    public BigDecimal aDecimal( String example ) {
        return new BigDecimal( example );
    }
}

这是我认为这里发生的事情:

  1. 不知何故,spring 将此方法注册为名为 bean 的工厂 BigDecimal 类型的“aDecimal”,依赖于 type 的 bean 字符串
  2. 在某些时候,将使用正确的 bean 调用此方法,如下所示 参数和结果将是关联到的实例 “aDecimal”bean。

如果我想对这样的事情做同样的事情:

@Configuration
public class DynamicConfiguration {

    public void registerDefinition() {
        /* i know it can't be like this but i hope it's clear what i mean */
        register( "aDecimal", (example) -> aDecimal( example ) );
    }

    public BigDecimal aDecimal( String example ) {
        /* this could be any kind of complex bean creation method */
        return new BigDecimal( example );
    }
}

实现这一结果的正确方法是什么?

我已经对此进行了一些研究,例如我发现了

How do I create beans programmatically in Spring Boot?

但是这种注册好像没有注解那么强大,我们用spring实例化bean吧,我希望通过提供的方法来实例化bean

How to programmatically create bean definition with injected properties?

并且缺少调用带有注入(inject) bean 参数的方法的能力。

我想这样做的原因是,我有一些配置类,它们基于配置文件,包含许多具有不同限定符的相同类型的 bean。 现在每次扩展配置文件时,我都需要添加新的bean和配置(其中许多是spring SessionFactories和SpringIntegration流,所以我需要这些东西是spring bean)

最佳答案

您需要考虑使用IntegrationFlowContext:

@Autowired
private IntegrationFlowContext integrationFlowContext;

...


IntegrationFlow myFlow = f -> ...;

BeanFactoryHandler additionalBean = new BeanFactoryHandler();

IntegrationFlowRegistration flowRegistration =
            this.integrationFlowContext.registration(myFlow)
                    .addBean(additionalBean)
                    .register();

它为您提供了在运行时注册其他 bean 的钩子(Hook),而不仅仅是 IntegrationFlow 结构。

关于spring - 程序化 Bean 注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46569255/

相关文章:

java - Spring集成DSL : PublishSubscribeChannel order

java - 异常后未发出 Spring 集成消息

java - Weblogic 12.2.1,链接错误

java - 用于 Java/Spring 配置的 ZooKeeper?

java - 是否有类似于 Websphere 的 Weblogic 过滤类加载器

java - Spring Integration 调用多个方法并响应回同一个 bean

java - 使用 Spring 从 Splunk 读取数据

java - Hibernate不会创建表,即使它在sql中显示

json - 基于对象类型的 Spring 集成对象转换器

java - Spring 集成: Intercept channels Asynchronuously