Java动态代理问题

时间:2010-04-14 10:05:15

标签: java

1.动态代理实例是否为目标类的子类? java doc说代理实例实现了“接口列表”,没有提到子类化,但是通过调试,我看到代理实例确实继承了目标类的属性。“接口列表”是什么意思?我可以排除目标类实现的那些接口吗?

2.我可以在代理实例上调用特定于目标类的方法吗?

3。 我认为动态代理是一个接口方法调用代理而不是目标类代理,是不是(我深受hibernate代理对象概念的感染)?

2 个答案:

答案 0 :(得分:5)

如果你在谈论java.lang.reflect.Proxy课:一般来说,没有“目标课”这样的东西。

代理是constructed,通过指定代理对象将实现的接口列表,以及一个调用处理程序,其invoke()方法将对代理上的所有方法调用进行转发。调用处理程序可以对它们执行任何操作,包括将它们转发到它拥有引用的“目标类”实例。

答案 1 :(得分:1)

  1. 我觉得你误解了。传递给getProxyClass()的每个Class对象必须是接口的类对象,而不是具体的类。所以String.class不是有效的参数,但List.class会是。{1}}。正如它所说的那样“接口数组中的所有Class对象必须代表接口,而不是类或基本类型”。因此,子类是无关紧要的。

  2. 否(因为这里的类不相关,只有接口)。如果您需要访问它们,请添加一个界面。

  3. 正确。

相关问题