Browse Source

Polish SynthesizedAnnotationInvocationHandler

pull/808/head
Sam Brannen 10 years ago
parent
commit
ae5c8285a6
  1. 25
      spring-core/src/main/java/org/springframework/core/annotation/SynthesizedAnnotationInvocationHandler.java

25
spring-core/src/main/java/org/springframework/core/annotation/SynthesizedAnnotationInvocationHandler.java

@ -24,10 +24,10 @@ import java.util.Iterator; @@ -24,10 +24,10 @@ import java.util.Iterator;
import java.util.Map;
import org.springframework.util.ObjectUtils;
import org.springframework.util.ReflectionUtils;
import org.springframework.util.StringUtils;
import static org.springframework.core.annotation.AnnotationUtils.*;
import static org.springframework.util.ReflectionUtils.*;
/**
* {@link InvocationHandler} for an {@link Annotation} that Spring has
@ -67,24 +67,21 @@ class SynthesizedAnnotationInvocationHandler implements InvocationHandler { @@ -67,24 +67,21 @@ class SynthesizedAnnotationInvocationHandler implements InvocationHandler {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
String methodName = method.getName();
Class<?>[] parameterTypes = method.getParameterTypes();
int parameterCount = parameterTypes.length;
if ("equals".equals(methodName) && (parameterCount == 1) && (parameterTypes[0] == Object.class)) {
if (isEqualsMethod(method)) {
return equals(proxy, args[0]);
}
else if ("toString".equals(methodName) && (parameterCount == 0)) {
if (isToStringMethod(method)) {
return toString(proxy);
}
String methodName = method.getName();
Class<?> returnType = method.getReturnType();
boolean nestedAnnotation = (Annotation[].class.isAssignableFrom(returnType) || Annotation.class.isAssignableFrom(returnType));
String aliasedAttributeName = aliasMap.get(methodName);
boolean aliasPresent = (aliasedAttributeName != null);
ReflectionUtils.makeAccessible(method);
Object value = ReflectionUtils.invokeMethod(method, this.annotation, args);
makeAccessible(method);
Object value = invokeMethod(method, this.annotation, args);
// No custom processing necessary?
if (!aliasPresent && !nestedAnnotation) {
@ -103,8 +100,8 @@ class SynthesizedAnnotationInvocationHandler implements InvocationHandler { @@ -103,8 +100,8 @@ class SynthesizedAnnotationInvocationHandler implements InvocationHandler {
throw new AnnotationConfigurationException(msg);
}
ReflectionUtils.makeAccessible(aliasedMethod);
Object aliasedValue = ReflectionUtils.invokeMethod(aliasedMethod, this.annotation, args);
makeAccessible(aliasedMethod);
Object aliasedValue = invokeMethod(aliasedMethod, this.annotation, args);
Object defaultValue = getDefaultValue(this.annotation, methodName);
if (!ObjectUtils.nullSafeEquals(value, aliasedValue) && !ObjectUtils.nullSafeEquals(value, defaultValue)
@ -149,8 +146,8 @@ class SynthesizedAnnotationInvocationHandler implements InvocationHandler { @@ -149,8 +146,8 @@ class SynthesizedAnnotationInvocationHandler implements InvocationHandler {
}
for (Method attributeMethod : getAttributeMethods(this.annotationType)) {
Object thisValue = ReflectionUtils.invokeMethod(attributeMethod, proxy);
Object otherValue = ReflectionUtils.invokeMethod(attributeMethod, other);
Object thisValue = invokeMethod(attributeMethod, proxy);
Object otherValue = invokeMethod(attributeMethod, other);
if (!ObjectUtils.nullSafeEquals(thisValue, otherValue)) {
return false;
}
@ -167,7 +164,7 @@ class SynthesizedAnnotationInvocationHandler implements InvocationHandler { @@ -167,7 +164,7 @@ class SynthesizedAnnotationInvocationHandler implements InvocationHandler {
Method attributeMethod = iterator.next();
sb.append(attributeMethod.getName());
sb.append('=');
sb.append(valueToString(ReflectionUtils.invokeMethod(attributeMethod, proxy)));
sb.append(valueToString(invokeMethod(attributeMethod, proxy)));
sb.append(iterator.hasNext() ? ", " : "");
}

Loading…
Cancel
Save