diff --git a/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/loader/InterceptorInstanceLoader.java b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/loader/InterceptorInstanceLoader.java index 0996f3002..90ad0e2d0 100644 --- a/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/loader/InterceptorInstanceLoader.java +++ b/skywalking-collector/skywalking-api/src/main/java/com/ai/cloud/skywalking/plugin/interceptor/loader/InterceptorInstanceLoader.java @@ -25,15 +25,16 @@ public class InterceptorInstanceLoader { public static T load(String className, ClassLoader targetClassLoader) throws InvocationTargetException, IllegalAccessException, InstantiationException, ClassNotFoundException { - if (InterceptorInstanceLoader.class.getClassLoader().equals(targetClassLoader)) { - return (T) targetClassLoader.loadClass(className).newInstance(); - } - String instanceKey = className + "_OF_" + targetClassLoader.getClass().getName() + "@" + Integer.toHexString(targetClassLoader.hashCode()); Object inst = INSTANCE_CACHE.get(instanceKey); if (inst != null) { return (T) inst; } + + if (InterceptorInstanceLoader.class.getClassLoader().equals(targetClassLoader)) { + return (T) targetClassLoader.loadClass(className).newInstance(); + } + instanceLoadLock.lock(); try { try { @@ -49,9 +50,7 @@ public class InterceptorInstanceLoader { } catch (Exception e) { throw new ClassNotFoundException(targetClassLoader.toString() + " load interceptor class:" + className + " failure.", e); } - } finally - - { + } finally { instanceLoadLock.unlock(); }