renamed getAnnotations to getMethodAnnotations; added getMethodAnnotation and getParameterAnnotation convenience methods

This commit is contained in:
Juergen Hoeller 2009-10-01 15:20:31 +00:00
parent b152ac34fd
commit 71a045328c
2 changed files with 32 additions and 9 deletions

View File

@ -157,7 +157,7 @@ public class QualifierAnnotationAutowireCandidateResolver implements AutowireCan
if (methodParam != null) { if (methodParam != null) {
Method method = methodParam.getMethod(); Method method = methodParam.getMethod();
if (method == null || void.class.equals(method.getReturnType())) { if (method == null || void.class.equals(method.getReturnType())) {
match = checkQualifiers(bdHolder, methodParam.getAnnotations()); match = checkQualifiers(bdHolder, methodParam.getMethodAnnotations());
} }
} }
} }
@ -274,7 +274,7 @@ public class QualifierAnnotationAutowireCandidateResolver implements AutowireCan
if (value == null) { if (value == null) {
MethodParameter methodParam = descriptor.getMethodParameter(); MethodParameter methodParam = descriptor.getMethodParameter();
if (methodParam != null) { if (methodParam != null) {
value = findValue(methodParam.getAnnotations()); value = findValue(methodParam.getMethodAnnotations());
} }
} }
return value; return value;

View File

@ -31,10 +31,6 @@ import org.springframework.util.Assert;
* a Method or Constructor plus a parameter index and a nested type index for * a Method or Constructor plus a parameter index and a nested type index for
* a declared generic type. Useful as a specification object to pass along. * a declared generic type. Useful as a specification object to pass along.
* *
* <p>Used by {@link GenericCollectionTypeResolver},
* {@link org.springframework.beans.BeanWrapperImpl} and
* {@link org.springframework.beans.factory.support.AbstractBeanFactory}.
*
* @author Juergen Hoeller * @author Juergen Hoeller
* @author Rob Harrop * @author Rob Harrop
* @author Andy Clement * @author Andy Clement
@ -212,22 +208,49 @@ public class MethodParameter {
/** /**
* Return the annotations associated with the target method/constructor itself. * Return the annotations associated with the target method/constructor itself.
*/ */
public Annotation[] getAnnotations() { public Annotation[] getMethodAnnotations() {
return (this.method != null ? this.method.getAnnotations() : this.constructor.getAnnotations()); return (this.method != null ? this.method.getAnnotations() : this.constructor.getAnnotations());
} }
/**
* Return the method/constructor annotation of the given type, if available.
* @param annotationType the annotation type to look for
* @return the annotation object, or <code>null</code> if not found
*/
@SuppressWarnings("unchecked")
public <T extends Annotation> T getMethodAnnotation(Class<T> annotationType) {
return (this.method != null ? this.method.getAnnotation(annotationType) :
(T) this.constructor.getAnnotation(annotationType));
}
/** /**
* Return the annotations associated with the specific method/constructor parameter. * Return the annotations associated with the specific method/constructor parameter.
*/ */
public Annotation[] getParameterAnnotations() { public Annotation[] getParameterAnnotations() {
if (this.parameterAnnotations == null) { if (this.parameterAnnotations == null) {
Annotation[][] annotationArray = (this.method != null) ? Annotation[][] annotationArray = (this.method != null ?
this.method.getParameterAnnotations() : this.constructor.getParameterAnnotations(); this.method.getParameterAnnotations() : this.constructor.getParameterAnnotations());
this.parameterAnnotations = annotationArray[this.parameterIndex]; this.parameterAnnotations = annotationArray[this.parameterIndex];
} }
return this.parameterAnnotations; return this.parameterAnnotations;
} }
/**
* Return the parameter annotation of the given type, if available.
* @param annotationType the annotation type to look for
* @return the annotation object, or <code>null</code> if not found
*/
@SuppressWarnings("unchecked")
public <T extends Annotation> T getParameterAnnotation(Class<T> annotationType) {
Annotation[] anns = getParameterAnnotations();
for (Annotation ann : anns) {
if (annotationType.isInstance(ann)) {
return (T) ann;
}
}
return null;
}
/** /**
* Initialize parameter name discovery for this method parameter. * Initialize parameter name discovery for this method parameter.
* <p>This method does not actually try to retrieve the parameter name at * <p>This method does not actually try to retrieve the parameter name at