当前位置: 首页 > 知识库问答 >
问题:

如何在Spring(引导)应用程序的代码中动态添加bean?

郦兴德
2023-03-14

我有一个使用spring-rabbit的Spring(引导)应用程序,我根据需要创建绑定bean,如下所示:

import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class QueueBindings {

    // first binding

    @Bean
    public Queue firstQueue(@Value("${rabbitmq.first.queue}") String queueName) {
        return new Queue(queueName);
    }

    @Bean
    public FanoutExchange firstExchange(@Value("${rabbitmq.first.exchange}") String exchangeName) {
        return new FanoutExchange(exchangeName);
    }

    @Bean
    public Binding firstBinding(Queue firstQueue, FanoutExchange firstExchange) {
        return BindingBuilder.bind(firstQueue).to(firstExchange);
    }

    // second binding

    @Bean
    public Queue secondQueue(@Value("${rabbitmq.second.queue}") String queueName) {
        return new Queue(queueName);
    }

    @Bean
    public FanoutExchange secondExchange(@Value("${rabbitmq.second.exchange}") String exchangeName) {
        return new FanoutExchange(exchangeName);
    }

    @Bean
    public Binding secondBinding(Queue secondQueue, FanoutExchange secondExchange) {
        return BindingBuilder.bind(secondQueue).to(secondExchange);
    }

}

我遇到的问题是,每3个bean只有两条信息,队列名和交换名。

有没有一种方法可以将任意数量的bean添加到上下文中,而不是复制和粘贴一堆@bean方法?我想要类似于“对于这个列表中的每个名字,添加这三个连接的bean。”

共有1个答案

吴修洁
2023-03-14

要以编程方式注册任意数量的bean,需要下拉到较低级别的API。可以在配置类上使用@import引用importBeanDefinitionRegistrar实现。在注册器的registerBeanDefinitions方法中,您将注册所有bean的bean定义。

如果希望能够在外部配置将要注册的bean,则ImportBeanDefinitionRegistrar可以是EnvironmentAware。这允许您注入environment,以便您可以使用其属性自定义注册器将要注册的bean。

 类似资料:
  • 问题内容: 我要迁移到Redux。 我的应用程序包含很多部分(页面,组件),因此我想创建许多化简器。Redux的例子表明,我应该使用它来生成一个reducer。 另外,据我了解,Redux应用程序应具有一个存储,并且在应用程序启动后即会创建。创建商店时,我应该通过我的组合减速器。如果应用程序不是太大,这是有道理的。 但是,如果我构建多个JavaScript捆绑包怎么办?例如,应用程序的每个页面都有

  • 在所有活动上添加导航抽屉的有效方法是什么?我不想在所有的活动和它们的布局中重复导航抽屉的代码。有没有可能以某种方式添加导航。BaseActivity(自定义类)中的抽屉,然后每个其他活动都将扩展BaseActivity以便拥有导航抽屉?

  • 我有一个Spring boot应用程序,希望在Eclipse中作为服务器应用程序运行。因此,该应用程序将被识别为Tomcat web应用程序,并可以在更新facet时添加: 当我运行web应用程序时,找不到我的rest服务。spring boot应用程序包含的文件夹结构与spring boot发布前的spring应用程序不同。spring boot应用程序可以从配置了eclipse的tomcat上

  • 我想在Spring Boot应用程序中使用WebSphereLiberty,而不是tomcat服务器。如果我是正确的,它是不支持开箱即用的。如何配置spring boot/websphere liberty来实现这一点?

  • 以下是错误: 下面是我的pom.xml文件: 这是我的主课:

  • 我能够调试一个简单的Java hello world。第一步是使用进行“编译”。我查了一下我将如何与maven完成同样的任务,发现http://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/run-debug.html,但这些指令用于运行应用程序并等待调试器连接。 我还尝试在。调试器抱怨在根目录中找不到文件,但它正在运行