1.动态代理实例是否为目标类的子类? java doc说代理实例实现了“接口列表”,没有提到子类化,但是通过调试,我看到代理实例确实继承了目标类的属性。“接口列表”是什么意思?我可以排除目标类实现的那些接口吗?
2.我可以在代理实例上调用特定于目标类的方法吗?
3。 我认为动态代理是一个接口方法调用代理而不是目标类代理,是不是(我深受hibernate代理对象概念的感染)?
答案 0 :(得分:5)
如果你在谈论java.lang.reflect.Proxy
课:一般来说,没有“目标课”这样的东西。
代理是constructed,通过指定代理对象将实现的接口列表,以及一个调用处理程序,其invoke()
方法将对代理上的所有方法调用进行转发。调用处理程序可以对它们执行任何操作,包括将它们转发到它拥有引用的“目标类”实例。
答案 1 :(得分:1)
我觉得你误解了。传递给getProxyClass()的每个Class
对象必须是接口的类对象,而不是具体的类。所以String.class
不是有效的参数,但List.class
会是。{1}}。正如它所说的那样“接口数组中的所有Class对象必须代表接口,而不是类或基本类型”。因此,子类是无关紧要的。
否(因为这里的类不相关,只有接口)。如果您需要访问它们,请添加一个界面。
正确。