From fc009ed0410fc9cc5ec08a69d8729b917d1e82b5 Mon Sep 17 00:00:00 2001 From: longyun Date: Wed, 3 Aug 2022 16:08:31 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E8=87=AA=E5=AE=9A=E4=B9=89xm?= =?UTF-8?q?l=E9=85=8D=E7=BD=AE=E4=BF=A1=E6=81=AF=E7=9A=84=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../spring/context/ConfigsParamsContext.java | 28 ++++++ .../context/RegistryXMLConfigsContext.java | 27 ++++++ .../spring/enums/ConfigStrategyEnum.java | 31 +++++++ .../spring/processor/ConfigPostProcessor.java | 7 ++ .../processor/ConfigsParamsPostProcessor.java | 15 +++ .../processor/XMLConfigPostProcessor.java | 36 +++++++ .../ApplicationParamsPostProcessor.java | 46 +++++++++ .../params/ProtocolParamsPostProcessor.java | 44 +++++++++ .../params/ReferenceParamsPostProcessor.java | 54 +++++++++++ .../params/RegistryParamsPostProcessor.java | 48 ++++++++++ .../params/ServiceParamsPostProcessor.java | 51 ++++++++++ .../schema/WheelBeanDefinitionParser.java | 93 +++++++------------ .../spring/schema/WheelNamespaceHandler.java | 59 +++++++++--- .../spring/util/RegistryXMLConfigs.java | 26 ++++++ .../.gitignore | 6 +- 15 files changed, 496 insertions(+), 75 deletions(-) create mode 100644 wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/context/ConfigsParamsContext.java create mode 100644 wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/context/RegistryXMLConfigsContext.java create mode 100644 wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/enums/ConfigStrategyEnum.java create mode 100644 wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/processor/ConfigPostProcessor.java create mode 100644 wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/processor/ConfigsParamsPostProcessor.java create mode 100644 wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/processor/XMLConfigPostProcessor.java create mode 100644 wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/processor/params/ApplicationParamsPostProcessor.java create mode 100644 wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/processor/params/ProtocolParamsPostProcessor.java create mode 100644 wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/processor/params/ReferenceParamsPostProcessor.java create mode 100644 wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/processor/params/RegistryParamsPostProcessor.java create mode 100644 wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/processor/params/ServiceParamsPostProcessor.java create mode 100644 wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/util/RegistryXMLConfigs.java diff --git a/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/context/ConfigsParamsContext.java b/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/context/ConfigsParamsContext.java new file mode 100644 index 0000000..08b62d9 --- /dev/null +++ b/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/context/ConfigsParamsContext.java @@ -0,0 +1,28 @@ +package com.wheel.yun.config.spring.context; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Description: 自定义xml配置中的键值对参数值 + * tg: + * + * + * @author longyun + * @version 1.0 + * @date 2022/8/3 10:31 + */ +public class ConfigsParamsContext { + public static Map> PARAMS = new HashMap<>(); + + public static Map> ClassMapBeanName = new HashMap<>(); + + public static void putParams(Class clazz,List params){ + PARAMS.put(clazz,params); + } + + public static void putClassAndBeanName(Class clazz,List ids){ + ClassMapBeanName.put(clazz,ids); + } +} diff --git a/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/context/RegistryXMLConfigsContext.java b/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/context/RegistryXMLConfigsContext.java new file mode 100644 index 0000000..41292e5 --- /dev/null +++ b/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/context/RegistryXMLConfigsContext.java @@ -0,0 +1,27 @@ +package com.wheel.yun.config.spring.context; + +import com.wheel.yun.common.utils.Pair; +import com.wheel.yun.config.spring.util.RegistryXMLConfigs; + +import java.util.ArrayList; +import java.util.List; + +/** + * Description: + * + * @author longyun + * @version 1.0 + * @date 2022/8/3 10:01 + */ +public class RegistryXMLConfigsContext { + private static List> ConfigsContext = new ArrayList<>(); + + public static List> getConfigsContext(){ + RegistryXMLConfigsContext.ConfigsContext.addAll(RegistryXMLConfigs.getRegistryXMLConfigs()); + return RegistryXMLConfigsContext.ConfigsContext; + } + + + + +} diff --git a/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/enums/ConfigStrategyEnum.java b/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/enums/ConfigStrategyEnum.java new file mode 100644 index 0000000..6bee0ac --- /dev/null +++ b/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/enums/ConfigStrategyEnum.java @@ -0,0 +1,31 @@ +package com.wheel.yun.config.spring.enums; + + +import com.wheel.yun.config.common.*; +import com.wheel.yun.config.spring.ReferenceBean; +import com.wheel.yun.config.spring.ServiceBean; + +public enum ConfigStrategyEnum { + WheelApplication("application", ApplicationConfig.class), + WheelProtocol("protocol", ProtocolConfig.class), + WheelReference("reference", ReferenceBean.class), + WheelRegistry("registry", RegistryConfig.class), + WheelService("service", ServiceBean.class); + + private String configString; + private Class configClass; + + ConfigStrategyEnum(String configString,Class configClass){ + this.configString = configString; + this.configClass = configClass; + } + + public Class getConfigClass() { + return configClass; + } + + public String getConfigString() { + return configString; + } + +} diff --git a/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/processor/ConfigPostProcessor.java b/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/processor/ConfigPostProcessor.java new file mode 100644 index 0000000..f10ef4c --- /dev/null +++ b/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/processor/ConfigPostProcessor.java @@ -0,0 +1,7 @@ +package com.wheel.yun.config.spring.processor; + +import java.util.List; + +public interface ConfigPostProcessor { + List getConfigPostProcessorList(); +} diff --git a/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/processor/ConfigsParamsPostProcessor.java b/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/processor/ConfigsParamsPostProcessor.java new file mode 100644 index 0000000..bb48437 --- /dev/null +++ b/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/processor/ConfigsParamsPostProcessor.java @@ -0,0 +1,15 @@ +package com.wheel.yun.config.spring.processor; + + + + +import java.util.List; + + +public interface ConfigsParamsPostProcessor { + void postProcessConfigParams(); + + List getParams(); + + void getBeanName(); +} diff --git a/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/processor/XMLConfigPostProcessor.java b/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/processor/XMLConfigPostProcessor.java new file mode 100644 index 0000000..ab67e70 --- /dev/null +++ b/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/processor/XMLConfigPostProcessor.java @@ -0,0 +1,36 @@ +package com.wheel.yun.config.spring.processor; + +import com.wheel.yun.config.spring.processor.params.*; + +import java.util.ArrayList; +import java.util.List; + +/** + * Description: + * + * @author longyun + * @version 1.0 + * @date 2022/8/3 13:53 + */ +public class XMLConfigPostProcessor implements ConfigPostProcessor{ + private List configSetPostProcessor = new ArrayList<>(); + + public XMLConfigPostProcessor(){ + configSetPostProcessor.add(ApplicationParamsPostProcessor.class); + configSetPostProcessor.add(ProtocolParamsPostProcessor.class); + configSetPostProcessor.add(ReferenceParamsPostProcessor.class); + configSetPostProcessor.add(RegistryParamsPostProcessor.class); + configSetPostProcessor.add(ServiceParamsPostProcessor.class); + } + @Override + public List getConfigPostProcessorList() { + this.beforeSetXMLConfig(this.configSetPostProcessor); + return this.configSetPostProcessor; + } + + /** + * 空方法,可以继承该类,添加自定义配置后置处理器 + * @param list + */ + public void beforeSetXMLConfig(List list){} +} diff --git a/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/processor/params/ApplicationParamsPostProcessor.java b/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/processor/params/ApplicationParamsPostProcessor.java new file mode 100644 index 0000000..a3f37bd --- /dev/null +++ b/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/processor/params/ApplicationParamsPostProcessor.java @@ -0,0 +1,46 @@ +package com.wheel.yun.config.spring.processor.params; + +import com.wheel.yun.config.common.ApplicationConfig; +import com.wheel.yun.config.spring.context.ConfigsParamsContext; +import com.wheel.yun.config.spring.processor.ConfigsParamsPostProcessor; + +import java.util.ArrayList; +import java.util.List; + +/** + * Description: + * + * @author longyun + * @version 1.0 + * @date 2022/8/3 10:43 + */ +public class ApplicationParamsPostProcessor implements ConfigsParamsPostProcessor { + + public ApplicationParamsPostProcessor(){ + this.postProcessConfigParams(); + } + + + @Override + public void postProcessConfigParams() { + List params = this.getParams(); + ConfigsParamsContext.putParams(ApplicationConfig.class,params); + this.getBeanName(); + } + + @Override + public List getParams() { + List params = new ArrayList<>(); + params.add("name"); + return params; + } + + @Override + public void getBeanName() { + List ids = new ArrayList<>(); + ids.add("name"); + ConfigsParamsContext.putClassAndBeanName(ApplicationConfig.class,ids); + } + + +} diff --git a/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/processor/params/ProtocolParamsPostProcessor.java b/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/processor/params/ProtocolParamsPostProcessor.java new file mode 100644 index 0000000..af89c06 --- /dev/null +++ b/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/processor/params/ProtocolParamsPostProcessor.java @@ -0,0 +1,44 @@ +package com.wheel.yun.config.spring.processor.params; + +import com.wheel.yun.config.common.ProtocolConfig; +import com.wheel.yun.config.spring.context.ConfigsParamsContext; +import com.wheel.yun.config.spring.processor.ConfigsParamsPostProcessor; + +import java.util.ArrayList; +import java.util.List; + +/** + * Description: + * + * @author longyun + * @version 1.0 + * @date 2022/8/3 10:56 + */ +public class ProtocolParamsPostProcessor implements ConfigsParamsPostProcessor { + + public ProtocolParamsPostProcessor(){ + this.postProcessConfigParams(); + } + + @Override + public void postProcessConfigParams() { + List params = this.getParams(); + ConfigsParamsContext.putParams(ProtocolConfig.class,params); + this.getBeanName(); + } + + @Override + public List getParams() { + List params = new ArrayList<>(); + params.add("protocol"); + params.add("port"); + return params; + } + + @Override + public void getBeanName() { + List ids = new ArrayList<>(); + ids.add("protocol"); + ConfigsParamsContext.putClassAndBeanName(ProtocolConfig.class,ids); + } +} diff --git a/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/processor/params/ReferenceParamsPostProcessor.java b/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/processor/params/ReferenceParamsPostProcessor.java new file mode 100644 index 0000000..9f8a23a --- /dev/null +++ b/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/processor/params/ReferenceParamsPostProcessor.java @@ -0,0 +1,54 @@ +package com.wheel.yun.config.spring.processor.params; + +import com.wheel.yun.config.spring.ReferenceBean; +import com.wheel.yun.config.spring.context.ConfigsParamsContext; +import com.wheel.yun.config.spring.processor.ConfigsParamsPostProcessor; + +import java.util.ArrayList; +import java.util.List; + +/** + * Description: + * + * @author longyun + * @version 1.0 + * @date 2022/8/3 10:58 + */ +public class ReferenceParamsPostProcessor implements ConfigsParamsPostProcessor { + + + public ReferenceParamsPostProcessor(){ + this.postProcessConfigParams(); + } + + @Override + public void postProcessConfigParams() { + List params = this.getParams(); + ConfigsParamsContext.putParams(ReferenceBean.class,params); + this.getBeanName(); + } + + @Override + public List getParams() { + List params = new ArrayList<>(); + params.add("id"); + params.add("interface"); + params.add("version"); + params.add("group"); + params.add("timeout"); + params.add("failStrategy"); + params.add("retryCount"); + return params; + } + + @Override + public void getBeanName() { + List ids = new ArrayList<>(); + ids.add("id"); + ids.add("interface"); + ids.add("version"); + ids.add("group"); + ConfigsParamsContext.putClassAndBeanName(ReferenceBean.class,ids); + + } +} diff --git a/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/processor/params/RegistryParamsPostProcessor.java b/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/processor/params/RegistryParamsPostProcessor.java new file mode 100644 index 0000000..28a082b --- /dev/null +++ b/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/processor/params/RegistryParamsPostProcessor.java @@ -0,0 +1,48 @@ +package com.wheel.yun.config.spring.processor.params; + + + +import com.wheel.yun.config.common.RegistryConfig; +import com.wheel.yun.config.spring.context.ConfigsParamsContext; +import com.wheel.yun.config.spring.processor.ConfigsParamsPostProcessor; + +import java.util.ArrayList; +import java.util.List; + +/** + * Description: + * + * @author longyun + * @version 1.0 + * @date 2022/8/3 10:54 + */ +public class RegistryParamsPostProcessor implements ConfigsParamsPostProcessor { + + + public RegistryParamsPostProcessor(){ + this.postProcessConfigParams(); + } + + + @Override + public void postProcessConfigParams() { + List params = this.getParams(); + ConfigsParamsContext.putParams(RegistryConfig.class,params); + this.getBeanName(); + } + + @Override + public List getParams() { + List params = new ArrayList<>(); + params.add("id"); + params.add("address"); + return params; + } + + @Override + public void getBeanName() { + List ids = new ArrayList<>(); + ids.add("id"); + ConfigsParamsContext.putClassAndBeanName(RegistryConfig.class,ids); + } +} diff --git a/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/processor/params/ServiceParamsPostProcessor.java b/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/processor/params/ServiceParamsPostProcessor.java new file mode 100644 index 0000000..f736904 --- /dev/null +++ b/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/processor/params/ServiceParamsPostProcessor.java @@ -0,0 +1,51 @@ +package com.wheel.yun.config.spring.processor.params; + +import com.wheel.yun.config.spring.ServiceBean; +import com.wheel.yun.config.spring.context.ConfigsParamsContext; +import com.wheel.yun.config.spring.processor.ConfigsParamsPostProcessor; + +import java.util.ArrayList; +import java.util.List; + +/** + * Description: + * + * @author longyun + * @version 1.0 + * @date 2022/8/3 11:00 + */ +public class ServiceParamsPostProcessor implements ConfigsParamsPostProcessor { + + public ServiceParamsPostProcessor(){ + this.postProcessConfigParams(); + } + + @Override + public void postProcessConfigParams() { + List params = this.getParams(); + ConfigsParamsContext.putParams(ServiceBean.class,params); + this.getBeanName(); + } + + @Override + public List getParams() { + List params = new ArrayList<>(); + params.add("interface"); + params.add("version"); + params.add("ref"); + params.add("group"); + params.add("timeout"); + params.add("failStrategy"); + params.add("retryCount"); + params.add("weight"); + params.add("loadbalance"); + return params; + } + + @Override + public void getBeanName() { + List ids = new ArrayList<>(); + ids.add("interface"); + ConfigsParamsContext.putClassAndBeanName(ServiceBean.class,ids); + } +} diff --git a/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/schema/WheelBeanDefinitionParser.java b/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/schema/WheelBeanDefinitionParser.java index 05196fa..2277691 100644 --- a/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/schema/WheelBeanDefinitionParser.java +++ b/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/schema/WheelBeanDefinitionParser.java @@ -1,25 +1,22 @@ package com.wheel.yun.config.spring.schema; - - -import com.wheel.yun.common.config.InterfaceConfig; -import com.wheel.yun.config.common.ApplicationConfig; -import com.wheel.yun.config.common.ProtocolConfig; -import com.wheel.yun.config.common.RegistryConfig; import com.wheel.yun.config.common.cache.WheelBeanDefinitionCache; -import com.wheel.yun.config.spring.ReferenceBean; -import com.wheel.yun.config.spring.ServiceBean; -import com.wheel.yun.config.spring.util.WheelBeanUtils; +import com.wheel.yun.config.spring.context.ConfigsParamsContext; +import com.wheel.yun.config.spring.processor.XMLConfigPostProcessor; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.GenericBeanDefinition; import org.springframework.beans.factory.xml.BeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; import org.w3c.dom.Element; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.util.List; + /** * @author jack_yun * @version 1.0 - * @description: TODO + * @description: * @date 2022/5/28 17:31 */ public class WheelBeanDefinitionParser implements BeanDefinitionParser { @@ -35,60 +32,32 @@ public BeanDefinition parse(Element element, ParserContext parserContext) { GenericBeanDefinition genericBeanDefinition = new GenericBeanDefinition(); genericBeanDefinition.setBeanClass(beanClass); genericBeanDefinition.setLazyInit(false); - if(beanClass.equals(ApplicationConfig.class)){ - genericBeanDefinition.getPropertyValues().add("name",element.getAttribute("name")); - parserContext.getRegistry().registerBeanDefinition(ApplicationConfig.class.getName(),genericBeanDefinition); - }else if(beanClass.equals(RegistryConfig.class)){ - genericBeanDefinition.getPropertyValues().add("id",element.getAttribute("id")); - genericBeanDefinition.getPropertyValues().add("address",element.getAttribute("address")); - if(WheelBeanUtils.ADDRESS.length() == 0){ - WheelBeanUtils.ADDRESS = element.getAttribute("address"); - } - WheelBeanDefinitionCache.putCache(RegistryConfig.class, element.getAttribute("id")); - - parserContext.getRegistry().registerBeanDefinition(element.getAttribute("id"),genericBeanDefinition); - }else if(beanClass.equals(ProtocolConfig.class)){ - genericBeanDefinition.getPropertyValues().add("protocol",element.getAttribute("protocol")); - genericBeanDefinition.getPropertyValues().add("port",element.getAttribute("port")); - - WheelBeanDefinitionCache.putCache(ProtocolConfig.class,element.getAttribute("protocol")); - - parserContext.getRegistry().registerBeanDefinition(element.getAttribute("protocol"),genericBeanDefinition); - }else if(beanClass.equals(ServiceBean.class)){ - if(element.getAttribute("interface") == null || element.getAttribute("interface").length() == 0) - return genericBeanDefinition; - genericBeanDefinition.getPropertyValues().add("interface",element.getAttribute("interface")); - genericBeanDefinition.getPropertyValues().add("version",element.getAttribute("version")); - genericBeanDefinition.getPropertyValues().add("ref",element.getAttribute("ref")); - genericBeanDefinition.getPropertyValues().add("group",element.getAttribute("group")); - genericBeanDefinition.getPropertyValues().add("timeout",element.getAttribute("timeout")); - genericBeanDefinition.getPropertyValues().add("failStrategy",element.getAttribute("failStrategy")); - genericBeanDefinition.getPropertyValues().add("retryCount",element.getAttribute("retryCount")); - - WheelBeanDefinitionCache.putCache(ServiceBean.class,element.getAttribute("interface")); - - parserContext.getRegistry().registerBeanDefinition(element.getAttribute("interface"),genericBeanDefinition); - }else if(beanClass.equals(ReferenceBean.class)){ - System.out.println(element.getAttribute("id")); - String id = element.getAttribute("id")+element.getAttribute("interface")+element.getAttribute("version")+ - element.getAttribute("group"); - if(id == null || id.length() == 0) - return genericBeanDefinition; - genericBeanDefinition.getPropertyValues().add("id",element.getAttribute("id")); - genericBeanDefinition.getPropertyValues().add("interface",element.getAttribute("interface")); - genericBeanDefinition.getPropertyValues().add("version",element.getAttribute("version")); - genericBeanDefinition.getPropertyValues().add("group",element.getAttribute("group")); - genericBeanDefinition.getPropertyValues().add("timeout",element.getAttribute("timeout")); - genericBeanDefinition.getPropertyValues().add("failStrategy",element.getAttribute("failStrategy")); - genericBeanDefinition.getPropertyValues().add("retryCount",element.getAttribute("retryCount")); + this.parse(element,parserContext,genericBeanDefinition); - - WheelBeanDefinitionCache.putCache(ReferenceBean.class,id); - parserContext.getRegistry().registerBeanDefinition(id,genericBeanDefinition); - }else{ - throw new IllegalArgumentException("error<--------------->error"); - } return genericBeanDefinition; } + private void parse(Element element,ParserContext parserContext + ,GenericBeanDefinition beanDefinition){ + List beanNames = ConfigsParamsContext.ClassMapBeanName.get(this.beanClass); + String beanName = ""; + for(int i = 0;i params = ConfigsParamsContext.PARAMS.get(this.beanClass); + for(String param:params){ + String attribute = element.getAttribute(param); + if(attribute == null ||attribute.length() == 0) + continue; + beanDefinition.getPropertyValues().add(param,attribute); + } + // 放入wheel容器内部,后续找相应的容器,直接从该缓存找,即可 + WheelBeanDefinitionCache.putCache(this.beanClass,beanName); + // 注册到容器中 + parserContext.getRegistry().registerBeanDefinition(beanName,beanDefinition); + } + + } diff --git a/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/schema/WheelNamespaceHandler.java b/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/schema/WheelNamespaceHandler.java index cfc49f6..0115e19 100644 --- a/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/schema/WheelNamespaceHandler.java +++ b/wheel-config/wheel-config-spring/src/main/java/com/wheel/yun/config/spring/schema/WheelNamespaceHandler.java @@ -1,29 +1,66 @@ package com.wheel.yun.config.spring.schema; -import com.wheel.yun.config.common.ApplicationConfig; -import com.wheel.yun.config.common.ProtocolConfig; -import com.wheel.yun.config.common.RegistryConfig; -import com.wheel.yun.config.spring.ReferenceBean; -import com.wheel.yun.config.spring.ServiceBean; +import com.wheel.yun.common.utils.Pair; +import com.wheel.yun.config.spring.context.RegistryXMLConfigsContext; +import com.wheel.yun.config.spring.processor.XMLConfigPostProcessor; import org.springframework.beans.factory.xml.NamespaceHandlerSupport; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.util.List; + /** * @author jack_yun * @version 1.0 - * @description: TODO + * @description: * @date 2022/5/28 17:29 */ public class WheelNamespaceHandler extends NamespaceHandlerSupport { @Override public void init() { - registerBeanDefinitionParser("application", new WheelBeanDefinitionParser(ApplicationConfig.class)); - registerBeanDefinitionParser("registry", new WheelBeanDefinitionParser(RegistryConfig.class)); - registerBeanDefinitionParser("protocol", new WheelBeanDefinitionParser(ProtocolConfig.class)); - registerBeanDefinitionParser("service", new WheelBeanDefinitionParser(ServiceBean.class)); - registerBeanDefinitionParser("reference", new WheelBeanDefinitionParser(ReferenceBean.class)); + // 初始化配置参数相关的后置处理器 + this.instanceConstructor(); + // 注册beanDefinition转化器 + this.process(); + } + + private void process(){ + List> configsContext = RegistryXMLConfigsContext.getConfigsContext(); + this.beforeRegisterParser(configsContext); + for(int i = 0;i> configsContext){}; + + private void instanceConstructor(){ + XMLConfigPostProcessor xmlConfigPostProcessor = new XMLConfigPostProcessor(); + List configPostProcessorList = xmlConfigPostProcessor.getConfigPostProcessorList(); + for(int i = 0;i> getRegistryXMLConfigs(){ + int len = ConfigStrategyEnum.values().length; + List> pairs = new ArrayList<>(); + for(int i = 0;i(ConfigStrategyEnum.values()[i].getConfigString() + , ConfigStrategyEnum.values()[i].getConfigClass())); + } + return pairs; + } +} diff --git a/wheel-demo/wheel-demo-spring-anno/wheel-demo-spring-anno-consumer/.gitignore b/wheel-demo/wheel-demo-spring-anno/wheel-demo-spring-anno-consumer/.gitignore index a2a3040..549e00a 100644 --- a/wheel-demo/wheel-demo-spring-anno/wheel-demo-spring-anno-consumer/.gitignore +++ b/wheel-demo/wheel-demo-spring-anno/wheel-demo-spring-anno-consumer/.gitignore @@ -1,8 +1,8 @@ HELP.md target/ !.mvn/wrapper/maven-wrapper.jar -!**/src/main/** -!**/src/test/** +!**/src/main/**/target/ +!**/src/test/**/target/ ### STS ### .apt_generated @@ -26,6 +26,8 @@ target/ /nbdist/ /.nb-gradle/ build/ +!**/src/main/**/build/ +!**/src/test/**/build/ ### VS Code ### .vscode/