From 4941a2f98d615c1cb1a12bd30c5c66296324329e Mon Sep 17 00:00:00 2001 From: wenshao Date: Tue, 14 Aug 2012 09:22:21 +0800 Subject: [PATCH] refactor spring stat --- .../spring/stat/DruidStatInterceptor.java | 14 ++--- ...{MethodInfo.java => SpringMethodInfo.java} | 58 +++++++++---------- .../support/spring/stat/SpringMethodStat.java | 6 +- .../druid/support/spring/stat/SpringStat.java | 4 +- 4 files changed, 40 insertions(+), 42 deletions(-) rename src/main/java/com/alibaba/druid/support/spring/stat/{MethodInfo.java => SpringMethodInfo.java} (53%) diff --git a/src/main/java/com/alibaba/druid/support/spring/stat/DruidStatInterceptor.java b/src/main/java/com/alibaba/druid/support/spring/stat/DruidStatInterceptor.java index c8eb99ed41..75c2afc642 100644 --- a/src/main/java/com/alibaba/druid/support/spring/stat/DruidStatInterceptor.java +++ b/src/main/java/com/alibaba/druid/support/spring/stat/DruidStatInterceptor.java @@ -29,7 +29,7 @@ public class DruidStatInterceptor implements MethodInterceptor, InitializingBean public Object invoke(MethodInvocation invocation) throws Throwable { SpringMethodStat lastMethodStat = SpringMethodStat.current(); - MethodInfo methodInfo = getMethodInfo(invocation); + SpringMethodInfo methodInfo = getMethodInfo(invocation); SpringMethodStat methodStat = springStat.getMethodStat(methodInfo, true); @@ -60,16 +60,16 @@ public class DruidStatInterceptor implements MethodInterceptor, InitializingBean } } - public MethodInfo getMethodInfo(MethodInvocation invocation) { + public SpringMethodInfo getMethodInfo(MethodInvocation invocation) { Object thisObject = invocation.getThis(); Method method = invocation.getMethod(); if (thisObject == null) { - return new MethodInfo(method.getDeclaringClass(), method); + return new SpringMethodInfo(method.getDeclaringClass(), method); } if (method.getDeclaringClass() == thisObject.getClass()) { - return new MethodInfo(method.getDeclaringClass(), method); + return new SpringMethodInfo(method.getDeclaringClass(), method); } { @@ -89,7 +89,7 @@ public class DruidStatInterceptor implements MethodInterceptor, InitializingBean if (isCglibProxy || isJavassistProxy) { Class superClazz = clazz.getSuperclass(); - return new MethodInfo(superClazz, method); + return new SpringMethodInfo(superClazz, method); } } @@ -120,9 +120,9 @@ public class DruidStatInterceptor implements MethodInterceptor, InitializingBean } if (clazz == null) { - return new MethodInfo(method.getDeclaringClass(), method); + return new SpringMethodInfo(method.getDeclaringClass(), method); } - return new MethodInfo(clazz, method); + return new SpringMethodInfo(clazz, method); } } diff --git a/src/main/java/com/alibaba/druid/support/spring/stat/MethodInfo.java b/src/main/java/com/alibaba/druid/support/spring/stat/SpringMethodInfo.java similarity index 53% rename from src/main/java/com/alibaba/druid/support/spring/stat/MethodInfo.java rename to src/main/java/com/alibaba/druid/support/spring/stat/SpringMethodInfo.java index e7f065b752..80050cdab9 100644 --- a/src/main/java/com/alibaba/druid/support/spring/stat/MethodInfo.java +++ b/src/main/java/com/alibaba/druid/support/spring/stat/SpringMethodInfo.java @@ -2,40 +2,32 @@ package com.alibaba.druid.support.spring.stat; import java.lang.reflect.Method; -public class MethodInfo { +public class SpringMethodInfo { - private String className; - private String methodName; - private final String signature; + private String signature; - public MethodInfo(Class instanceClass, Method method){ - this.className = instanceClass.getName(); - this.methodName = method.getName(); - signature = getMethodSignature(method); + private Class instanceClass; + private Method method; + + public SpringMethodInfo(Class instanceClass, Method method){ + this.instanceClass = instanceClass; + this.method = method; } public String getClassName() { - return className; - } - - public void setClassName(String className) { - this.className = className; + return instanceClass.getName(); } public String getMethodName() { - return methodName; - } - - public void setMethodName(String methodName) { - this.methodName = methodName; + return method.getName(); } @Override public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + ((className == null) ? 0 : className.hashCode()); - result = prime * result + ((signature == null) ? 0 : signature.hashCode()); + result = prime * result + instanceClass.getName().hashCode(); + result = prime * result + method.getName().hashCode(); return result; } @@ -53,21 +45,24 @@ public class MethodInfo { return false; } - MethodInfo other = (MethodInfo) obj; - if (className == null) { - if (other.className != null) { - return false; - } - } else if (!className.equals(other.className)) { + SpringMethodInfo other = (SpringMethodInfo) obj; + + if (!instanceClass.getName().equals(other.instanceClass.getName())) { return false; } - if (signature == null) { - if (other.signature != null) { + if (!method.getName().equals(other.method.getName())) { + return false; + } + + if (method.getParameterTypes().length != other.method.getParameterTypes().length) { + return false; + } + + for (int i = 0; i < method.getParameterTypes().length; ++i) { + if (method.getParameterTypes()[i].getName().equals(other.method.getParameterTypes()[i].getName())) { return false; } - } else if (!signature.equals(other.signature)) { - return false; } return true; @@ -88,6 +83,9 @@ public class MethodInfo { } public String getSignature() { + if (signature == null) { + signature = getMethodSignature(method); + } return signature; } } diff --git a/src/main/java/com/alibaba/druid/support/spring/stat/SpringMethodStat.java b/src/main/java/com/alibaba/druid/support/spring/stat/SpringMethodStat.java index f77acc9033..f76a72057b 100644 --- a/src/main/java/com/alibaba/druid/support/spring/stat/SpringMethodStat.java +++ b/src/main/java/com/alibaba/druid/support/spring/stat/SpringMethodStat.java @@ -9,7 +9,7 @@ public class SpringMethodStat { private final static ThreadLocal currentLocal = new ThreadLocal(); - private final MethodInfo methodInfo; + private final SpringMethodInfo methodInfo; private final AtomicInteger runningCount = new AtomicInteger(); private final AtomicInteger concurrentMax = new AtomicInteger(); @@ -25,7 +25,7 @@ public class SpringMethodStat { private final AtomicLong jdbcCommitCount = new AtomicLong(); private final AtomicLong jdbcRollbackCount = new AtomicLong(); - public SpringMethodStat(MethodInfo methodInfo){ + public SpringMethodStat(SpringMethodInfo methodInfo){ this.methodInfo = methodInfo; } @@ -44,7 +44,7 @@ public class SpringMethodStat { jdbcRollbackCount.set(0); } - public MethodInfo getMethodInfo() { + public SpringMethodInfo getMethodInfo() { return methodInfo; } diff --git a/src/main/java/com/alibaba/druid/support/spring/stat/SpringStat.java b/src/main/java/com/alibaba/druid/support/spring/stat/SpringStat.java index 85ca65c079..1eaddd2aca 100644 --- a/src/main/java/com/alibaba/druid/support/spring/stat/SpringStat.java +++ b/src/main/java/com/alibaba/druid/support/spring/stat/SpringStat.java @@ -8,7 +8,7 @@ import java.util.concurrent.ConcurrentMap; public class SpringStat { - private ConcurrentMap methodStats = new ConcurrentHashMap(); + private ConcurrentMap methodStats = new ConcurrentHashMap(); public SpringStat(){ @@ -20,7 +20,7 @@ public class SpringStat { } } - public SpringMethodStat getMethodStat(MethodInfo methodInfo, boolean create) { + public SpringMethodStat getMethodStat(SpringMethodInfo methodInfo, boolean create) { SpringMethodStat methodStat = methodStats.get(methodInfo); if (methodStat != null) { return methodStat;