package org.springframework.cloud.config.xml; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanFactoryPostProcessor; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.xml.AbstractSimpleBeanDefinitionParser; import org.springframework.beans.factory.xml.NamespaceHandlerSupport; import org.springframework.cloud.config.CloudScanHelper; import org.w3c.dom.Element; /** * Handler for the 'cloud' namespace * * @author Ramnivas Laddad * */ public class CloudNamespaceHandler extends NamespaceHandlerSupport { @Override public void init() { registerBeanDefinitionParser("service", new GenericCloudServiceFactoryParser()); registerBeanDefinitionParser("rabbit-connection-factory", new CloudRabbitConnectionFactoryParser()); registerBeanDefinitionParser("redis-connection-factory", new CloudRedisConnectionFactoryParser()); registerBeanDefinitionParser("mongo-db-factory", new CloudMongoDbFactoryParser()); registerBeanDefinitionParser("data-source", new CloudDataSourceFactoryParser()); registerBeanDefinitionParser("connection-properties", new ConnectionPropertiesParser()); this.registerBeanDefinitionParser("properties", new AbstractSimpleBeanDefinitionParser() { @Override protected Class<?> getBeanClass(Element element) { return CloudPropertiesFactoryBean.class; } }); this.registerBeanDefinitionParser("service-scan", new AbstractSimpleBeanDefinitionParser() { @Override protected Class<?> getBeanClass(Element element) { return ServiceScanBeanFactoryProcessor.class; } @Override protected boolean shouldGenerateId() { return true; } }); } public static class ServiceScanBeanFactoryProcessor implements BeanFactoryPostProcessor { private CloudScanHelper helper = new CloudScanHelper(); @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { helper.registerServiceBeans((BeanDefinitionRegistry) beanFactory); } } }