1、代理模式(1、代理类和被代理对象;2、被代理对象不想去执行的方法;3、代理)
1.1、JDK动态代理(字节码重组)
代理类实现接口 invocationHandler ,实现invoke 方法,和获取getInstance()方法获取代理对象$Proxy0
h.invoke()通过接口调用被代理对象的方法
jdk动态代理,必须有接口,实现类实现接口中的为实现的 方法。
手写动态代理:
定义字节的classLoader,findClass方法读取生成的代理对象Proxy0定义自己的InvocationHandler定义invoke方法定义自己的Proxy代理对象自己写的代码生成代理类“Proxy0
定义自己的InvocationHandler 定义invoke方法
定义自己的Proxy 代理对象 自己写的代码生成代理类“Proxy0定义自己的InvocationHandler定义invoke方法定义自己的Proxy代理对象自己写的代码生成代理类“Proxy0”,有generate生成代码的方法,读取源代码,编译,用ClassLoader把字节码加载到jvm 中。返回代理对象(一般是通过constructor),
1.2、cglib动态代理
不用是基于接口的代理
代理类 implements MethodInterceptor,实现intercepter方法,
cglib是利用 Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(target.getClass());//被代理类
enhancer.setCallback(this);
return enhancer.create();
利用以上代码获取被代理类的子类,so在interceptor 方法中,要用 method.invokeSupper(o,args);执行代理方法
2、工厂模式
简单工程模式:定义接口(规则),定义的多个实现类(实现给定的规则),当不同的数据时,返回不同类型的实现
本文详细探讨了代理模式的两种实现方式——JDK动态代理和CGLIB动态代理,强调了JDK动态代理需要接口的约束,而CGLIB则无需基于接口。同时,文章还介绍了工厂模式,阐述了如何通过定义接口和实现类来应对不同数据场景下的对象创建需求。
2329

被折叠的 条评论
为什么被折叠?



