概要:1动态代理(过程 角色 Proxy0) 2手写(InvocationHandler 、2Handler实现、3类加载器、4MyProxy)
一、动态代理
1、过程
1)Proxy通过传递给它的参数(interfaces/invocationHandler)生成代理类$Proxy0;
2)Proxy通过传递给它的参数(ClassLoader)来加载生成代理类$Proxy0字节码文件
2、角色
1业务接口Interface、2业务实现类target、3业务处理类Handler、4JVM在内存中生成的动态代理类$Proxy0
1业务接口 2业务实现类target 3业务处理类Handler3、$Proxy0
1)实现业务接口(Man),客户端可调接口方法
2)继承Proxy,通过构造方法将业务处理类传入给父类Proxy进行初始化。(Proxy中存在protected InvocationHandler h;)
最终回调Handler的invoke完成调用
二、手写动态代理
1InvocationHandler 、2Handler实现、3类加载器、4MyProxy
1、自定义InvocationHandler:
2、实现MyInvocationHandler的业务处理Handler:
3、自定义类加载器MyClassLoader:
自己在内存中生成动态代理类,加载
重写findClass,为在指定路径下加载指定字节码文件:
4、自定义MyProxy(当于JDK的Proxy):
1)根据interfaces接口构造动态代理类需要方法(利用反射获取)
2)动态生成代理类(.java)进行编译,生成字节码文件(.class),加载
3)实例化构造方法(反射机制),初始化业务Hanlder
5其他
1)MyProxy的其他方法 编译:
2)getMethodString方法
3)运行结果
4)生成的$MyProxy0:
https://www.jianshu.com/p/58759fef38b8
网友评论