关于动态代理模式中动态生成的代理类的问题.

只是_曾经 2016-12-14 06:00:10
http://blog.csdn.net/lidatgb/article/details/8993131

我是参考这篇博客写的动态代理例子,动态代理中的代理类是是否实现被代理对象的接口?

public class Client {
public static void main(String[] args) {
LogHandler logHandler = new LogHandler();
UserManager userManager = (UserManager)logHandler.newProxyInstance(new UserManagerImpl());
userManager.addUser("dddd", 12);
System.out.println(userManager.getClass().getInterfaces());
}
}

上面logHandler.newProxyInstance获得的是一个Proxy对象,强制转换为接口UserManager,而 System.out.println(userManager.getClass().getInterfaces());的输出结果不是UserManager
...全文
201 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
只是_曾经 2016-12-15
  • 打赏
  • 举报
回复
引用 1 楼 Inhibitory 的回复:
userManager 是 JVM 动态生成的代理类的对象,不是 UserManager,但是它的类和 UserManager 实现了同样的接口,可以参考 Java动态代理 http://www.cppblog.com/biao/archive/2009/02/02/72779.html
然而获取userManager 的接口userManager.getClass().getInterfaces(),结果是[Ljava.lang.Class;@211aa79a,如果代理和被代理者都实现了接口,输出应该是接口
只是_曾经 2016-12-15
  • 打赏
  • 举报
回复
引用 2 楼 qq_30110165 的回复:
动态代理生成的类就是实现了接口,通过接口来调用!!!
但是最后获取代理的接口,却输出的是[Ljava.lang.Class;@211aa79a,显然不是被代理类的接口
qq_30110165 2016-12-14
  • 打赏
  • 举报
回复
动态代理生成的类就是实现了接口,通过接口来调用!!!
Inhibitory 2016-12-14
  • 打赏
  • 举报
回复
userManager 是 JVM 动态生成的代理类的对象,不是 UserManager,但是它的类和 UserManager 实现了同样的接口,可以参考 Java动态代理 http://www.cppblog.com/biao/archive/2009/02/02/72779.html

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧