@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;
}
手动创建的对象注入到Spring容器中
最新推荐文章于 2023-10-15 00:01:44 发布