|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.springframework.core.annotation.AnnotationUtils
public abstract class AnnotationUtils
General utility methods for working with annotations, handling bridge methods (which the compiler generates for generic declarations) as well as super methods (for optional "annotation inheritance"). Note that none of this is provided by the JDK's introspection facilities themselves.
As a general rule for runtime-retained annotations (e.g. for transaction control, authorization or service
exposure), always use the lookup methods on this class (e.g., findAnnotation(Method, Class)
, getAnnotation(Method, Class)
, and getAnnotations(Method)
) instead of the plain annotation lookup
methods in the JDK. You can still explicitly choose between lookup on the given class level only (getAnnotation(Method, Class)
) and lookup in the entire inheritance hierarchy of the given method (findAnnotation(Method, Class)
).
AccessibleObject.getAnnotations()
,
Method.getAnnotation(Class)
Constructor Summary | |
---|---|
AnnotationUtils()
|
Method Summary | ||
---|---|---|
static
|
findAnnotation(Class<?> clazz,
Class<A> annotationType)
Find a single Annotation of annotationType from the supplied Class , traversing its
interfaces and super classes if no annotation can be found on the given class itself. |
|
static
|
findAnnotation(Method method,
Class<A> annotationType)
Get a single Annotation of annotationType from the supplied Method ,
traversing its super methods if no annotation can be found on the given method itself. |
|
static Class<?> |
findAnnotationDeclaringClass(Class<? extends Annotation> annotationType,
Class<?> clazz)
Find the first Class in the inheritance hierarchy of the specified clazz (including the
specified clazz itself) which declares an annotation for the specified annotationType , or
null if not found. |
|
static
|
getAnnotation(Method method,
Class<A> annotationType)
Get a single Annotation of annotationType from the supplied Method . |
|
static Map<String,Object> |
getAnnotationAttributes(Annotation annotation)
Retrieve the given annotation's attributes as a Map, preserving all attribute types as-is. |
|
static Map<String,Object> |
getAnnotationAttributes(Annotation annotation,
boolean classValuesAsString)
Retrieve the given annotation's attributes as a Map. |
|
static Annotation[] |
getAnnotations(Method method)
Get all Annotations from the supplied Method . |
|
static Object |
getDefaultValue(Annotation annotation)
Retrieve the default value of the "value" attribute
of a single-element Annotation, given an annotation instance. |
|
static Object |
getDefaultValue(Annotation annotation,
String attributeName)
Retrieve the default value of a named Annotation attribute, given an annotation instance. |
|
static Object |
getDefaultValue(Class<? extends Annotation> annotationType)
Retrieve the default value of the "value" attribute
of a single-element Annotation, given the annotation type . |
|
static Object |
getDefaultValue(Class<? extends Annotation> annotationType,
String attributeName)
Retrieve the default value of a named Annotation attribute, given the annotation type . |
|
static Object |
getValue(Annotation annotation)
Retrieve the value of the "value" attribute of a
single-element Annotation, given an annotation instance. |
|
static Object |
getValue(Annotation annotation,
String attributeName)
Retrieve the value of a named Annotation attribute, given an annotation instance. |
|
static boolean |
isAnnotationDeclaredLocally(Class<? extends Annotation> annotationType,
Class<?> clazz)
Determine whether an annotation for the specified annotationType is
declared locally on the supplied clazz . |
|
static boolean |
isAnnotationInherited(Class<? extends Annotation> annotationType,
Class<?> clazz)
Determine whether an annotation for the specified annotationType is present
on the supplied clazz and is inherited
i.e., not declared locally for the class). |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public AnnotationUtils()
Method Detail |
---|
public static Annotation[] getAnnotations(Method method)
Annotations
from the supplied Method
.
Correctly handles bridge Methods
generated by the compiler.
method
- the method to look for annotations on
BridgeMethodResolver.findBridgedMethod(Method)
public static <A extends Annotation> A getAnnotation(Method method, Class<A> annotationType)
Annotation
of annotationType
from the supplied Method
.
Correctly handles bridge Methods
generated by the compiler.
method
- the method to look for annotations onannotationType
- the annotation class to look for
BridgeMethodResolver.findBridgedMethod(Method)
public static <A extends Annotation> A findAnnotation(Method method, Class<A> annotationType)
Annotation
of annotationType
from the supplied Method
,
traversing its super methods if no annotation can be found on the given method itself.
Annotations on methods are not inherited by default, so we need to handle this explicitly.
method
- the method to look for annotations onannotationType
- the annotation class to look for
null
if none foundpublic static <A extends Annotation> A findAnnotation(Class<?> clazz, Class<A> annotationType)
Annotation
of annotationType
from the supplied Class
, traversing its
interfaces and super classes if no annotation can be found on the given class itself. This method explicitly
handles class-level annotations which are not declared as inherited
as
well as annotations on interfaces.
The algorithm operates as follows: Searches for an annotation on the given class and returns it if found. Else searches all interfaces that the given class declares, returning the annotation from the first matching candidate, if any. Else proceeds with introspection of the superclass of the given class, checking the superclass itself; if no annotation found there, proceeds with the interfaces that the superclass declares. Recursing up through the entire superclass hierarchy if no match is found.
clazz
- the class to look for annotations onannotationType
- the annotation class to look for
null
if none foundpublic static Class<?> findAnnotationDeclaringClass(Class<? extends Annotation> annotationType, Class<?> clazz)
Class
in the inheritance hierarchy of the specified clazz
(including the
specified clazz
itself) which declares an annotation for the specified annotationType
, or
null
if not found. If the supplied clazz
is null
, null
will be
returned. If the supplied clazz
is an interface, only the interface itself will be checked; the
inheritance hierarchy for interfaces will not be traversed.
The standard Class
API does not provide a
mechanism for determining which class in an inheritance hierarchy actually declares an Annotation
, so we
need to handle this explicitly.
annotationType
- the Class object corresponding to the annotation typeclazz
- the Class object corresponding to the class on which to check for the annotation, or
null
.
Class
in the inheritance hierarchy of the specified clazz
which
declares an annotation for the specified annotationType
, or null
if not found.Class.isAnnotationPresent(Class)
,
Class.getDeclaredAnnotations()
public static boolean isAnnotationDeclaredLocally(Class<? extends Annotation> annotationType, Class<?> clazz)
annotationType
is
declared locally on the supplied clazz
. The supplied Class
may represent any type.
Note: This method does not determine if the annotation is
inherited
. For greater clarity regarding inherited
annotations, consider using isAnnotationInherited(Class, Class)
instead.
annotationType
- the Class object corresponding to the annotation typeclazz
- the Class object corresponding to the class on which to check for the annotation
true
if an annotation for the specified annotationType
is declared locally on the supplied clazz
Class.getDeclaredAnnotations()
,
isAnnotationInherited(Class, Class)
public static boolean isAnnotationInherited(Class<? extends Annotation> annotationType, Class<?> clazz)
annotationType
is present
on the supplied clazz
and is inherited
i.e., not declared locally for the class).
If the supplied clazz
is an interface, only the interface itself will be checked.
In accordance with standard meta-annotation semantics, the inheritance hierarchy for interfaces
will not be traversed. See the JavaDoc
for the
@Inherited meta-annotation for further details regarding annotation inheritance.
annotationType
- the Class object corresponding to the annotation typeclazz
- the Class object corresponding to the class on which to check for the annotation
true
if an annotation for the specified annotationType
is present
on the supplied clazz
and is inherited
Class.isAnnotationPresent(Class)
,
isAnnotationDeclaredLocally(Class, Class)
public static Map<String,Object> getAnnotationAttributes(Annotation annotation)
annotation
- the annotation to retrieve the attributes for
public static Map<String,Object> getAnnotationAttributes(Annotation annotation, boolean classValuesAsString)
annotation
- the annotation to retrieve the attributes forclassValuesAsString
- whether to turn Class references into Strings (for compatibility with
AnnotationMetadata
or to preserve them as Class references
public static Object getValue(Annotation annotation)
"value"
attribute of a
single-element Annotation, given an annotation instance.
annotation
- the annotation instance from which to retrieve the value
null
if not foundgetValue(Annotation, String)
public static Object getValue(Annotation annotation, String attributeName)
annotation
- the annotation instance from which to retrieve the valueattributeName
- the name of the attribute value to retrieve
null
if not foundgetValue(Annotation)
public static Object getDefaultValue(Annotation annotation)
"value"
attribute
of a single-element Annotation, given an annotation instance.
annotation
- the annotation instance from which to retrieve the default value
null
if not foundgetDefaultValue(Annotation, String)
public static Object getDefaultValue(Annotation annotation, String attributeName)
annotation
- the annotation instance from which to retrieve the default valueattributeName
- the name of the attribute value to retrieve
null
if not found.getDefaultValue(Class, String)
public static Object getDefaultValue(Class<? extends Annotation> annotationType)
"value"
attribute
of a single-element Annotation, given the annotation type
.
annotationType
- the annotation type for which the default value should be retrieved
null
if not foundgetDefaultValue(Class, String)
public static Object getDefaultValue(Class<? extends Annotation> annotationType, String attributeName)
annotation type
.
annotationType
- the annotation type for which the default value should be retrievedattributeName
- the name of the attribute value to retrieve.
null
if not foundgetDefaultValue(Annotation, String)
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |