手动创建的对象注入到Spring容器中

@Configuration
@Slf4j
public class MyConfig {
    @Autowired
    public  ApplicationContext applicationContext;
	
    public List<Exchange> getMyExchange(){
        if (applicationContext==null){
            return null;
        }
        String[] beanNamesForType = applicationContext.getBeanNamesForType(Exchange.class);
        if (beanNamesForType==null){
            return null;
        }
        ArrayList<Exchange> arrayList = new ArrayList();

        for (String exchangeName : beanNamesForType){
            Exchange bean = (Exchange) applicationContext.getBean(exchangeName);
            if (bean==null){
                continue;
            }
            Exchange backupExchange = null;
            String topicName="";
            if ("topic".equals(bean.getType())){
                backupExchange = new TopicExchange(bean.getName()+"_backup");
            }
            if ("direct".equals(bean.getType())){
                backupExchange = new DirectExchange(bean.getName()+"_backup");
            }
            if ("fanout".equals(bean.getType())){
                backupExchange = new FanoutExchange(bean.getName()+"_backup");
            }
            if (backupExchange == null){
                continue;
            }
            BeanUtils.copyProperties(bean,backupExchange,new String[]{"name"});

            ConfigurableApplicationContext configurableApplicationContext = (ConfigurableApplicationContext) applicationContext;
            DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) configurableApplicationContext.getAutowireCapableBeanFactory();
            
            Exchange finalBackupExchange = backupExchange;
            BeanDefinitionBuilder builder = BeanDefinitionBuilder
                    .genericBeanDefinition(Exchange.class, new Supplier<Exchange>(){

                        @Override
                        public Exchange get() {
                            return finalBackupExchange;
                        }
                    });
//            builder
//                    .addPropertyValue("name", backupExchange.getName()) //属性设置
//                    .addPropertyValue("type", backupExchange.getType())
//                    .addPropertyValue("arguments", backupExchange.getArguments())
//                    .addPropertyValue("declaringAdmins", backupExchange.getDeclaringAdmins())
//                    .addPropertyValue("autoDelete", backupExchange.isAutoDelete())
//                    .addPropertyValue("delayed", backupExchange.isDelayed())
//                    .addPropertyValue("durable", backupExchange.isDurable())
//                    .addPropertyValue("internal", backupExchange.isInternal())
//                    .addPropertyValue("ignoreDeclarationExceptions", backupExchange.isIgnoreDeclarationExceptions());
            BeanDefinition beanDefinition = builder.getBeanDefinition();
            beanDefinition.setScope("prototype");
            defaultListableBeanFactory.registerBeanDefinition(exchangeName + "_backup", beanDefinition);


            arrayList.add(backupExchange);
        }

        return  arrayList;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值