From 6c11ef70d44bd3792f2c01c54d417498c8291347 Mon Sep 17 00:00:00 2001 From: Redkale <22250530@qq.com> Date: Thu, 23 Nov 2017 08:56:40 +0800 Subject: [PATCH] --- src/org/redkale/util/ResourceFactory.java | 38 ++++++++++++----------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/src/org/redkale/util/ResourceFactory.java b/src/org/redkale/util/ResourceFactory.java index 1f529ad6d..b45c77914 100644 --- a/src/org/redkale/util/ResourceFactory.java +++ b/src/org/redkale/util/ResourceFactory.java @@ -777,25 +777,27 @@ public final class ResourceFactory { this.listener = tn.startsWith("java.") || tn.startsWith("javax.") ? null : findListener(t, field.getType()); } - private static synchronized Method findListener(Class clazz, Class fieldType) { - Class loop = clazz; - Method m = listenerMethods.get(clazz.getName() + "-" + fieldType.getName()); - if (m != null) return m; - do { - for (Method method : loop.getDeclaredMethods()) { - if (method.getAnnotation(ResourceListener.class) != null - && method.getParameterCount() == 3 - && String.class.isAssignableFrom(method.getParameterTypes()[0]) - && method.getParameterTypes()[1] == method.getParameterTypes()[2] - && method.getParameterTypes()[1].isAssignableFrom(fieldType)) { - m = method; - m.setAccessible(true); - break; + private static Method findListener(Class clazz, Class fieldType) { + synchronized (listenerMethods) { + Class loop = clazz; + Method m = listenerMethods.get(clazz.getName() + "-" + fieldType.getName()); + if (m != null) return m; + do { + for (Method method : loop.getDeclaredMethods()) { + if (method.getAnnotation(ResourceListener.class) != null + && method.getParameterCount() == 3 + && String.class.isAssignableFrom(method.getParameterTypes()[0]) + && method.getParameterTypes()[1] == method.getParameterTypes()[2] + && method.getParameterTypes()[1].isAssignableFrom(fieldType)) { + m = method; + m.setAccessible(true); + break; + } } - } - } while ((loop = loop.getSuperclass()) != Object.class); - listenerMethods.put(clazz.getName() + "-" + fieldType.getName(), m); - return m; + } while ((loop = loop.getSuperclass()) != Object.class); + listenerMethods.put(clazz.getName() + "-" + fieldType.getName(), m); + return m; + } } }