第二章 Java基础之GJLIB动态代理
来源:互联网 发布:网络婚礼 编辑:程序博客网 时间:2024/06/05 08:50
CJLIB动态代理代码实现
被代理类
public class CameraSuoni {public void photo(){System.out.println("用索尼相机给美女照了一张相");}}代理对象和代理处理器类
import java.lang.reflect.Method;import net.sf.cglib.proxy.Enhancer;import net.sf.cglib.proxy.MethodInterceptor;import net.sf.cglib.proxy.MethodProxy;public class CaremaCGLIBProxy implements MethodInterceptor{private Enhancer enhancer = new Enhancer(); public Object getProxy(Class cla){ //创建被代理类的子类字节码 enhancer.setSuperclass(cla); //回调,回调intercept方法 enhancer.setCallback(this); //根据字节码技术创建被代理类子类实例 Object obj = enhancer.create(); return obj; }public Object intercept(Object obj, Method method, Object[] arg2,MethodProxy arg3) throws Throwable {System.out.println("cglib动态代理----------------照相自带ps美白功能");arg3.invokeSuper(obj, arg2);return null;}}测试类
public class CaremaCGLIBTest {public static void main(String[] args){//被代理对象CameraSuoni camera = new CameraSuoni();//代理处理器和代理对象创建类CaremaCGLIBProxy proxy = new CaremaCGLIBProxy();//代理对象camera = (CameraSuoni) proxy.getProxy(camera.getClass());//已经带有其他效果的代理对象方法camera.photo();}}输出结果
cglib动态代理----------------照相自带ps美白功能用索尼相机给美女照了一张相
这里看一下CGLIB和JDK实现的原理其实很像的,CaremaCGLIBProxy实现了MethodInterceptor,CaremaCGLIBProxy中的intercept方法和实现InvocationHandler的类中的invoke方法很相似,都是通过反射执行被代理对象的原方法。CaremaCGLIBProxy中的getProxy方法和Proxy的newInstatceProxy方法功能也是一样的,都是创建代理对象。
CGLIB动态代理就是将被代理对象和增强对象组合在一起生存一个代理对象的字节码文件,再然后通过这个字节码文件生成代理对象,代理对象将被代理对象作为父类进行继承,在代理对象中重写了父类的方法。我们在调用代理对象的方法时候,就会实现增强和父类方法中所实现的效果。
CGLIB动态代理和JDK动态代理的不同和相同点
相同点
CGLIB和JDK都是通过字节码文件生成代理实例,不需要创建代理对象源文件。
不通点
JDK中的被代理对象必须实现接口,代理对象和被代理对象实现的是同一个接口
CGLIB被代理对象可以不实现接口,代理对象继承了被代理对象,所以CGLIB中的被代理对象不能有final修饰,代理对象调用的方法在被代理对象中也不能是fianl
0 0
- 第二章 Java基础之GJLIB动态代理
- java基础之动态代理
- java之架构基础-动态代理&cglib
- Java基础加强之动态代理
- 【java-之路】学习动态代理[基础]
- 第一章 Java基础之JDK动态代理
- java之架构基础-动态代理&cglib
- java之架构基础-动态代理&cglib
- Spring AOP 之 java 动态代理基础
- java基础之静态代理和动态代理
- Java基础:动态代理
- Java基础----动态代理
- Java 代理之 动态代理
- [ java ] java基础动态代理!
- java之动态代理
- java之动态代理
- Java之动态代理
- java之动态代理
- Qt5 趣学(2):电子钟
- 初始化列表的问题
- poj 2773Happy 2006
- poj3187(next_permutation实现全排列+杨辉三角)
- Java 二叉树遍历相关
- 第二章 Java基础之GJLIB动态代理
- 51nod1079 中国剩余定理
- 在单台VM中用Devstack部署OpenStack
- ScrollView里嵌套ListView的解决办法。
- [LeetCode][二叉树]Symmetric Tree
- json源数据中间汉字的地方是乱码
- 拍照后如何得到真实大小的图片
- Qt5 趣学(3):程序启动画面(广告小画面...)
- Abstract class VS Interface