我对代理类并不熟悉,我不知道这个(“注释”)如何成为代理对象。我可以从Proxy对象中检索注释吗?
public static void test(Annotation annotation) {
System.out.println("ValidBoolean annotation len:" + ValidBoolean.class.getAnnotations().length);
System.out.println(annotation.getClass().getName() + ":" + annotation.getClass().getAnnotations().length);
if (annotation instanceof ValidBoolean) {
ValidBoolean validBoolean = (ValidBoolean) annotation;
System.out.println("[BOOLEAN]" + validBoolean.getClass().getName() + ":" + validBoolean.getClass().getAnnotations().length);
}
}
结果是:
ValidBoolean annotation len:3
com.sun.proxy.$Proxy28:0
[BOOLEAN]com.sun.proxy.$Proxy28:0
答案 0 :(得分:4)
我还没有真正理解这种代理机制。但是我可以通过annotation.annotationType()
而不是annotation.getClass()
得到Annotation真正的类,因为注释只是一个接口,因此annotation.getClass()
只会产生一个Java代理对象!
看起来,Proxy对象并没有继承Annotations,这是我学到的最重要的事情。