1、动态代理的目的
动态代理用于代码的分离;将通用代码从各个业务模块中分离出来,不必在每个业务模块中都去实现,这样既减少了开发工作量,也便于维护;
eg: “吃饭”、“说话”这两个业务都需要用到“张嘴” “闭嘴”这两行代码,但是张嘴之后和闭嘴之前所做的事情是不一样的,这样将业务模块和通用模块(即 张嘴、闭嘴)分离出来,每次在说话 或者 吃饭的时候,使用通用模块+业务模块 实现吃饭和说话这两件事;
2、动态代理的应用
最典型的应用是基于动态代理技术实现spring框架中的AOP(面向切面编程); 面向切面编程,通过切面代码层,实现业务代码和通用代码的分离,这样各个业务模块可以共用一个通用代码。大概原理如下:切面层代码提供了一个调用其他方法的接口(姑且命名为 invoke),通过反射机制将类 和 方法等参数传入后,便在invoke 里面执行此方法,传入的方法仅仅是invoke方法的一部分,另一部分便是通用代码,这样就将通用代码和业务代码编制在了一起。(实际上sping中的增强就是这么回事)
3、动态代理的原理及实现
java提供了两种动态代理方式,一种是JDK动态代理,另一种是cglib动态代理;JDK动态代理仅仅实现了对接口的代理,cglib实现的是对对象的代理;二者相比,chlib综合性能更好一点;
(1) JDK动态代理
JDK动态代理是基于 “InvocationHandler接口” 和 “Proxy类” 实现的,其技术基础是 JAVA中的反射机制 及 面向对象中的重写
原文:http://www.cnblogs.com/tengpan-cn/p/4841033.html