最近在学习动态代理,找到了比较优秀的视频和比较优秀的博客,学习了一波
绝对优秀,倾情推荐
链接如下:
马士兵动态代理视频:链接: https://pan.baidu.com/s/1KDli2JXvu-zSTGyjw4lA5A 密码: 89u7
这篇博文侧重原理:https://www.cnblogs.com/gonjan-blog/p/6685611.html (和马士兵视频的风格一致)
这篇博文将侧重调用方法讲解:https://www.cnblogs.com/xiaoluo501395377/p/3383130.html
https://blog.csdn.net/ShuSheng0007/article/details/80864854
动态创建代理对象实现过程:
- invocationHandler接口:创建一个与代理对象相关联的InvocationHandler
InvocationHandler stuHandler = new MyInvocationHandler<Person>(stu);
其中,重写invoke方法
Object invoke(Object proxy, Method method, Object[] args) throws Throwable
proxy:代理对象
method:正在调用的方法
args:调用目标方法传入的实参
- 使用Proxy类的getProxyClass静态方法生成一个动态代理类stuProxyClass
Class<?> stuProxyClass = Proxy.getProxyClass(Person.class.getClassLoader(), new Class<?>[] {Person.class});
- 获得stuProxyClass 中一个带InvocationHandler参数的构造器constructor
Constructor<?> constructor = PersonProxy.getConstructor(InvocationHandler.class);
- 通过构造器constructor来创建一个动态实例stuProxy
Person stuProxy = (Person) cons.newInstance(stuHandler);
在以后的学习中多加揣摩...........................................