如果有几百个队列,正常做法是用@Bean方法将队列注入到Queue对象中,但这样太麻烦了,
我们可以把队列放到list中,然后再循环动态注入到spring容器中,
@Configuration
public class AutoBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
BeanDefinitionBuilder beanDefinitionBuilder;
BeanDefinition beanDefinition;
List<String> queueList = new QueueConstant().getQueueList();
for (String queue: queueList) {
//构建对象
beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(Queue.class);
//输入构造参数
beanDefinitionBuilder.addConstructorArgValue(queue);
beanDefinitionBuilder.addConstructorArgValue(true);
//注册对象
beanDefinition = beanDefinitionBuilder.getBeanDefinition();
registry.registerBeanDefinition(queue + "Queue", beanDefinition);
//构建对象
beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(Binding.class);
//输入构造参数
beanDefinitionBuilder.addConstructorArgValue(queue);
beanDefinitionBuilder.addConstructorArgValue(Binding.DestinationType.QUEUE);
beanDefinitionBuilder.addConstructorArgValue(ExchangeConstant.OLD_LOG_EXCHANGE);
beanDefinitionBuilder.addConstructorArgValue(queue);
beanDefinitionBuilder.addConstructorArgValue(Collections.emptyMap());
//注册对象
beanDefinition = beanDefinitionBuilder.getBeanDefinition();
registry.registerBeanDefinition(queue + "Bind", beanDefinition);
}
}
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory factory) throws BeansException {
}
}