Loading skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/ClassConstructorInterceptor.java +3 −10 Original line number Diff line number Diff line Loading @@ -24,21 +24,14 @@ public class ClassConstructorInterceptor { @FieldProxy(EnhanceClazz4Interceptor.contextAttrName) FieldSetter accessor, @AllArguments Object[] allArguments) { try { accessor.setValue(new EnhancedClassInstanceContext()); EnhancedClassInstanceContext context = new EnhancedClassInstanceContext(); accessor.setValue(context); ConstructorContext interceptorContext = new ConstructorContext( allArguments); interceptor.onConstruct(null, interceptorContext); interceptor.onConstruct(context, interceptorContext); } catch (Throwable t) { logger.error("ClassConstructorInterceptor failue.", t); } } public interface FieldGetter { Object getValue(); } public interface FieldSetter { void setValue(Object value); } } skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/EnhanceClazz4Interceptor.java +3 −6 Original line number Diff line number Diff line Loading @@ -19,8 +19,6 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import com.ai.cloud.skywalking.plugin.PluginCfg; import com.ai.cloud.skywalking.plugin.interceptor.ClassConstructorInterceptor.FieldGetter; import com.ai.cloud.skywalking.plugin.interceptor.ClassConstructorInterceptor.FieldSetter; public class EnhanceClazz4Interceptor { private static Logger logger = LogManager Loading Loading @@ -76,15 +74,14 @@ public class EnhanceClazz4Interceptor { ClassLoadingStrategy.Default.INJECTION).getLoaded(); /** * to classloader. <br/> * create a new class using origin classname.<br/> * * new class need:<br/> * 1.add field '_$EnhancedClassInstanceContext' of type * EnhancedClassInstanceContext <br/> * * 2.intercept constructor and method if required by * interceptorDefineClass. use '@FieldValue' get * '_$EnhancedClassInstanceContext' ref<br/> * 2.intercept constructor by default, and intercept method which it's required by * interceptorDefineClass. <br/> */ IAroundInterceptor interceptor = define.instance(); Loading skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/EnhancedClassInstanceContext.java +17 −2 Original line number Diff line number Diff line package com.ai.cloud.skywalking.plugin.interceptor; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * 被增强的类实例,需扩展的context属性,用于在不同的方法,或者构造函数间保存实例 Loading @@ -12,7 +12,22 @@ import java.util.Map; public class EnhancedClassInstanceContext { public static final String FIELD_NAME = "_$EnhancedClassInstanceContext"; private Map<Object, Object> context = new HashMap<Object, Object>(); private Map<Object, Object> context = new ConcurrentHashMap<Object, Object>(); public void set(Object key, Object value){ context.put(key, value); } public Object get(Object key){ return context.get(key); } public boolean isContain(Object key){ return context.containsKey(key); } @SuppressWarnings("unchecked") public <T> T get(Object key, Class<T> type){ return (T)this.get(key); } } skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/FieldGetter.java 0 → 100644 +5 −0 Original line number Diff line number Diff line package com.ai.cloud.skywalking.plugin.interceptor; public interface FieldGetter { Object getValue(); } skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/FieldSetter.java 0 → 100644 +5 −0 Original line number Diff line number Diff line package com.ai.cloud.skywalking.plugin.interceptor; public interface FieldSetter { void setValue(Object value); } Loading
skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/ClassConstructorInterceptor.java +3 −10 Original line number Diff line number Diff line Loading @@ -24,21 +24,14 @@ public class ClassConstructorInterceptor { @FieldProxy(EnhanceClazz4Interceptor.contextAttrName) FieldSetter accessor, @AllArguments Object[] allArguments) { try { accessor.setValue(new EnhancedClassInstanceContext()); EnhancedClassInstanceContext context = new EnhancedClassInstanceContext(); accessor.setValue(context); ConstructorContext interceptorContext = new ConstructorContext( allArguments); interceptor.onConstruct(null, interceptorContext); interceptor.onConstruct(context, interceptorContext); } catch (Throwable t) { logger.error("ClassConstructorInterceptor failue.", t); } } public interface FieldGetter { Object getValue(); } public interface FieldSetter { void setValue(Object value); } }
skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/EnhanceClazz4Interceptor.java +3 −6 Original line number Diff line number Diff line Loading @@ -19,8 +19,6 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import com.ai.cloud.skywalking.plugin.PluginCfg; import com.ai.cloud.skywalking.plugin.interceptor.ClassConstructorInterceptor.FieldGetter; import com.ai.cloud.skywalking.plugin.interceptor.ClassConstructorInterceptor.FieldSetter; public class EnhanceClazz4Interceptor { private static Logger logger = LogManager Loading Loading @@ -76,15 +74,14 @@ public class EnhanceClazz4Interceptor { ClassLoadingStrategy.Default.INJECTION).getLoaded(); /** * to classloader. <br/> * create a new class using origin classname.<br/> * * new class need:<br/> * 1.add field '_$EnhancedClassInstanceContext' of type * EnhancedClassInstanceContext <br/> * * 2.intercept constructor and method if required by * interceptorDefineClass. use '@FieldValue' get * '_$EnhancedClassInstanceContext' ref<br/> * 2.intercept constructor by default, and intercept method which it's required by * interceptorDefineClass. <br/> */ IAroundInterceptor interceptor = define.instance(); Loading
skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/EnhancedClassInstanceContext.java +17 −2 Original line number Diff line number Diff line package com.ai.cloud.skywalking.plugin.interceptor; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * 被增强的类实例,需扩展的context属性,用于在不同的方法,或者构造函数间保存实例 Loading @@ -12,7 +12,22 @@ import java.util.Map; public class EnhancedClassInstanceContext { public static final String FIELD_NAME = "_$EnhancedClassInstanceContext"; private Map<Object, Object> context = new HashMap<Object, Object>(); private Map<Object, Object> context = new ConcurrentHashMap<Object, Object>(); public void set(Object key, Object value){ context.put(key, value); } public Object get(Object key){ return context.get(key); } public boolean isContain(Object key){ return context.containsKey(key); } @SuppressWarnings("unchecked") public <T> T get(Object key, Class<T> type){ return (T)this.get(key); } }
skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/FieldGetter.java 0 → 100644 +5 −0 Original line number Diff line number Diff line package com.ai.cloud.skywalking.plugin.interceptor; public interface FieldGetter { Object getValue(); }
skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/FieldSetter.java 0 → 100644 +5 −0 Original line number Diff line number Diff line package com.ai.cloud.skywalking.plugin.interceptor; public interface FieldSetter { void setValue(Object value); }