spring如何给bean动态取不同的别名

开源项目SDK:https://github.com/mingyang66/spring-parent
个人文档:https://mingyang66.github.io/raccoon-docs/#/

spring、springboot向容器中注入bean的时候一般情况下只有一个别名,在某些特殊场景需要指定多个别名。

方案一:通过@Bean注解指定多个不同的别名
    @Bean(name = {"name1", "name2"})
    public People people() {
        return new People();
    }

上述方案可以指定多个beanname,但是有一个缺点,不可以动态的指定别名,即服务启动后通过配置文件或其它条件判定来指定不同的别名。

方案二:通过DefaultListableBeanFactory容器对象指定别名

    @Autowired
    private DefaultListableBeanFactory factory;

    @Bean
    public People people() {
        People people = new People();
        factory.registerSingleton("name1", people);
        factory.registerSingleton("name2", people);
        return people;
    }

上述方案给同一个实例对象命名了三个别名,分别是默认值people、name1、name2,这样就可以在服务启动后通过配置文件或其它方式动态的给bean取不同的别名。

  • 16
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
动态创建bean是通过SpringBeanFactory和ApplicationContext接口实现的,可以使用以下代码创建动态bean: ``` // 创建一个BeanFactory DefaultListableBeanFactory factory = new DefaultListableBeanFactory(); // 创建一个bean定义 RootBeanDefinition beanDef = new RootBeanDefinition(MyBean.class); // 设置属性 beanDef.getPropertyValues().add("propertyName", "propertyValue"); // 注册bean定义 factory.registerBeanDefinition("myBean", beanDef); // 获bean MyBean myBean = (MyBean)factory.getBean("myBean"); ``` 上面的代码中,首先创建了一个DefaultListableBeanFactory对象,它是Spring中的一个bean工厂,用于创建和管理bean。然后,创建了一个RootBeanDefinition对象,它是bean的定义,可以设置bean的属性和依赖项。接下来,将bean定义注册到BeanFactory中,并指定bean的名称。最后,通过getBean方法获bean实例。 使用ApplicationContext创建动态bean的代码如下: ``` // 创建一个ApplicationContext ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(); // 创建一个bean定义 RootBeanDefinition beanDef = new RootBeanDefinition(MyBean.class); // 设置属性 beanDef.getPropertyValues().add("propertyName", "propertyValue"); // 注册bean定义 context.registerBeanDefinition("myBean", beanDef); // 启动ApplicationContext context.refresh(); // 获bean MyBean myBean = (MyBean)context.getBean("myBean"); ``` 上面的代码中,首先创建了一个ClassPathXmlApplicationContext对象,它是ApplicationContext的一种实现,用于创建和管理bean。然后,创建了一个RootBeanDefinition对象,设置bean的属性和依赖项。接下来,将bean定义注册到ApplicationContext中,并指定bean的名称。最后,通过getBean方法获bean实例。 需要注意的是,动态创建bean需要在Spring容器启动之前进行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值