diff --git a/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/TestBeanFactoryPostProcessor.java b/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/TestBeanFactoryPostProcessor.java new file mode 100644 index 000000000..ba58fc440 --- /dev/null +++ b/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/TestBeanFactoryPostProcessor.java @@ -0,0 +1,20 @@ +package com.ai.cloud.skywalking.plugin.spring; + +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanPostProcessor; + +public class TestBeanFactoryPostProcessor implements BeanPostProcessor { + + + @Override + public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { + System.out.println(bean.getClass().getName()); + return bean; + } + + @Override + public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { + System.out.println(bean.getClass().getName()); + return bean; + } +} diff --git a/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/TraceParser.java b/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/TraceParser.java new file mode 100644 index 000000000..e1ebb9ac0 --- /dev/null +++ b/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/TraceParser.java @@ -0,0 +1,29 @@ +package com.ai.cloud.skywalking.plugin.spring; + +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.beans.factory.support.RootBeanDefinition; +import org.springframework.beans.factory.xml.BeanDefinitionParser; +import org.springframework.beans.factory.xml.ParserContext; +import org.w3c.dom.Element; + +public class TraceParser implements BeanDefinitionParser { + @Override + public BeanDefinition parse(Element element, ParserContext parserContext) { + RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(); + rootBeanDefinition.setLazyInit(false); + rootBeanDefinition.setBeanClass(TracingEnhanceProcessor.class); + String id = null; + id = element.getAttribute("name"); + int counter = 2; + while (parserContext.getRegistry().containsBeanDefinition(id)) { + id = id + (counter++); + } + if (id != null && id.length() > 0) { + if (parserContext.getRegistry().containsBeanDefinition(id)) { + throw new IllegalStateException("Duplicate spring bean id " + id); + } + parserContext.getRegistry().registerBeanDefinition(id, rootBeanDefinition); + } + return rootBeanDefinition; + } +} diff --git a/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/TracingBeanParser.java b/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/TracingBeanParser.java new file mode 100644 index 000000000..dd7e5818f --- /dev/null +++ b/skywalking-sdk-plugin/spring-plugin/src/main/java/com/ai/cloud/skywalking/plugin/spring/TracingBeanParser.java @@ -0,0 +1,56 @@ +package com.ai.cloud.skywalking.plugin.spring; + +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.beans.factory.config.RuntimeBeanReference; +import org.springframework.beans.factory.support.RootBeanDefinition; +import org.springframework.beans.factory.xml.BeanDefinitionParser; +import org.springframework.beans.factory.xml.ParserContext; +import org.w3c.dom.Element; +import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.Node; + +public class TracingBeanParser implements BeanDefinitionParser { + @Override + public BeanDefinition parse(Element element, ParserContext parserContext) { + // 获取Method并处理 + String methodPattern = element.getAttribute("method"); + if (methodPattern == null || methodPattern.length() == 0) { + throw new IllegalStateException("Miss method pattern"); + } + + String packageName = element.getAttribute("package"); + String className = element.getAttribute("class"); + + RootBeanDefinition beanDefinition = new RootBeanDefinition(); + beanDefinition.setBeanClass(TracingClassBean.class); + String id = null; + id =element.getAttribute("name"); + int counter = 2; + while(parserContext.getRegistry().containsBeanDefinition(id)) { + id = id +(counter++); + } + if (id != null &&id.length() > 0) { + if(parserContext.getRegistry().containsBeanDefinition(id)) { + throw new IllegalStateException("Duplicate spring bean id " + id); + } + parserContext.getRegistry().registerBeanDefinition(id,beanDefinition); + } + NamedNodeMap nnm =element.getAttributes(); + for (int i = 0; i extends AbstractSet implements Set, Serializable { + private static final long serialVersionUID = -8672117787651310382L; + private static final Object PRESENT = new Object(); + private final ConcurrentHashMap map; + + public ConcurrentHashSet() { + this.map = new ConcurrentHashMap(); + } + + public ConcurrentHashSet(int initialCapacity) { + this.map = new ConcurrentHashMap(initialCapacity); + } + + public Iterator iterator() { + return this.map.keySet().iterator(); + } + + public int size() { + return this.map.size(); + } + + public boolean isEmpty() { + return this.map.isEmpty(); + } + + public boolean contains(Object o) { + return this.map.containsKey(o); + } + + public boolean add(E e) { + return this.map.put(e, PRESENT) == null; + } + + public boolean remove(Object o) { + return this.map.remove(o) == PRESENT; + } + + public void clear() { + this.map.clear(); + } +} diff --git a/skywalking-sdk-plugin/spring-plugin/target/classes/META-INF/skywalking.xsd b/skywalking-sdk-plugin/spring-plugin/target/classes/META-INF/skywalking.xsd new file mode 100644 index 000000000..28c034b22 --- /dev/null +++ b/skywalking-sdk-plugin/spring-plugin/target/classes/META-INF/skywalking.xsd @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/skywalking-sdk-plugin/spring-plugin/target/classes/META-INF/spring.handlers b/skywalking-sdk-plugin/spring-plugin/target/classes/META-INF/spring.handlers new file mode 100644 index 000000000..4a1a195d9 --- /dev/null +++ b/skywalking-sdk-plugin/spring-plugin/target/classes/META-INF/spring.handlers @@ -0,0 +1 @@ +http\://cloud.asiainfo.com/schema/skywalking=com.ai.cloud.skywalking.plugin.spring.schema.SWNamespaceHandler \ No newline at end of file diff --git a/skywalking-sdk-plugin/spring-plugin/target/classes/META-INF/spring.schemas b/skywalking-sdk-plugin/spring-plugin/target/classes/META-INF/spring.schemas new file mode 100644 index 000000000..f26f1b043 --- /dev/null +++ b/skywalking-sdk-plugin/spring-plugin/target/classes/META-INF/spring.schemas @@ -0,0 +1 @@ +http\://cloud.asiainfo.com/schema/skywalking/skywalking.xsd=META-INF/skywalking.xsd \ No newline at end of file