知识卡片
动态代理用InvocationHandler接管方法实现
内容
之前的[[代理模式的定义与三个角色]]需为每个接口手写具体代理类,称静态代理;动态代理则在 运行阶段才指定代理谁。JDK动态生成实现接口的代理类,方法全部转交给实现InvocationHandler 的Handler,其invoke方法用反射调用真实对象方法。被代理类须至少实现一个接口。发散:写 代理类从手工编码变成运行时自动生成,代价是失去编译期类型检查。
参考来源
- 位置:《设计模式之禅(第2版)》第12章《代理模式》(源文件:_epub-src/text/part0056.html)
- 结论依据:原文说明"动态代理是在实现阶段不用关心代理谁,而在运行阶段才指定代理哪一个对象",并展示GamePlayIH实现InvocationHandler接口、其invoke方法用method.invoke(this.obj, args)调用真实对象方法完成实际处理。
- 原始内容:动态代理是在实现阶段不用关心代理谁,而在运行阶段才指定代理哪一个对象……所有被代理的方法都由InvocationHandler接管实际的处理任务……要实现动态代理的首要条件是:被代理类必须实现一个接口。