This must be described elsewhere, but a quick Googling didn't give it to me. A little experimentation reveals to me that JDK 5.0 annotations are dynamic proxies under the hood.
To find this out, I made an annotation named @annotate
and exammined annotation.class
; it revealed itself to be an interface. I then decorated a method with @annotate
, got the Method
with reflection, pulled the appropriate annotation class off with getAnnotation(annotate.class).getClass()
and examined that: dynamic proxy, $Proxy3(java.lang.reflect.InvocationHandler)
.
I wonder how I can use this knowlege for some real Java-fu.
UPDATE: An even stronger answer: Proxy.isProxyClass(Class)
returns true
on the method annotation class, and the proxy invocation handler is a sun.reflect.annotation.AnnotationInvocationHandler
. Good thing Sun provides source for the non-public bits.
1 comment:
I was googling for this and came on your Blog. I found out that by simply using the method annotationType() on the Annotation interface you get the real annotation class.
Post a Comment