diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/modifier/spring/beans/interceptor/TargetBeanFilter.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/modifier/spring/beans/interceptor/TargetBeanFilter.java index 674e54e5f..86626730d 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/modifier/spring/beans/interceptor/TargetBeanFilter.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/modifier/spring/beans/interceptor/TargetBeanFilter.java @@ -16,20 +16,18 @@ package com.navercorp.pinpoint.profiler.modifier.spring.beans.interceptor; -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; -import com.navercorp.pinpoint.bootstrap.config.ProfilerConfig; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import java.lang.annotation.Annotation; import java.util.ArrayList; import java.util.Collections; +import java.util.HashSet; import java.util.List; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; +import java.util.Set; import java.util.regex.Pattern; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import com.navercorp.pinpoint.bootstrap.config.ProfilerConfig; + /** * * @author Jongho Moon @@ -40,12 +38,9 @@ public class TargetBeanFilter { private static final int CACHE_CONCURRENCY_LEVEL = Runtime.getRuntime().availableProcessors() * 2; private static final Object EXIST = new Object(); - private final Logger logger = LoggerFactory.getLogger(getClass()); - private final List targetNamePatterns; private final List targetClassPatterns; - private final List targetAnnotationNames; - private final ConcurrentMap>> targetAnnotationMap = new ConcurrentHashMap>>(); + private final Set targetAnnotationNames; private final Cache, Object> transformed = createCache(); @@ -86,7 +81,7 @@ public class TargetBeanFilter { private TargetBeanFilter(List targetNamePatterns, List targetClassPatterns, List targetAnnotationNames) { this.targetNamePatterns = targetNamePatterns; this.targetClassPatterns = targetClassPatterns; - this.targetAnnotationNames = targetAnnotationNames; + this.targetAnnotationNames = targetAnnotationNames == null ? null : new HashSet(targetAnnotationNames); } public boolean isTarget(String beanName, Class clazz) { @@ -115,17 +110,15 @@ public class TargetBeanFilter { } if (targetAnnotationNames != null) { - List> targetAnnotations = getTargetAnnotations(clazz.getClassLoader()); - - for (Class a : targetAnnotations) { - if (clazz.isAnnotationPresent(a)) { + for (Annotation a : clazz.getAnnotations()) { + if (targetAnnotationNames.contains(a.annotationType().getName())) { return true; } } for (Annotation a : clazz.getAnnotations()) { - for (Class ac : targetAnnotations) { - if (a.annotationType().isAnnotationPresent(ac)) { + for (Annotation ac : a.annotationType().getAnnotations()) { + if (targetAnnotationNames.contains(ac.annotationType().getName())) { return true; } } @@ -150,40 +143,6 @@ public class TargetBeanFilter { transformed.put(clazz, EXIST); } - private List> getTargetAnnotations(ClassLoader classLoader) { - ClassLoader nonNull = classLoader == null ? ClassLoader.getSystemClassLoader() : classLoader; - - List> targetAnnotations = targetAnnotationMap.get(nonNull); - - if (targetAnnotations == null) { - targetAnnotations = loadTargetAnnotations(nonNull); - targetAnnotationMap.put(nonNull, targetAnnotations); - } - - return targetAnnotations; - } - - private List> loadTargetAnnotations(ClassLoader loader) { - if (targetAnnotationNames.isEmpty()) { - return Collections.emptyList(); - } - - List> targetAnnotationClasses = new ArrayList>(targetAnnotationNames.size()); - for (String targetAnnotationName : targetAnnotationNames) { - try { - Class clazz = loader.loadClass(targetAnnotationName); - Class ac = clazz.asSubclass(Annotation.class); - targetAnnotationClasses.add(ac); - } catch (ClassNotFoundException e) { - logger.warn("Cannot find Spring beans profile target annotation class: {}. This configuration will be ignored.", targetAnnotationName, e); - } catch (ClassCastException e) { - logger.warn("Given Spring beans profile target annotation class is not subclass of Annotation: {}. This configuration will be ignored.", targetAnnotationName, e); - } - } - - return targetAnnotationClasses; - } - private static List split(String values) { if (values == null) { return Collections.emptyList();