如果有幾百個隊列,正常做法是用@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 {
}
}