Java中的动态代理及实现原理
2021/11/6 1:09:45
本文主要是介绍Java中的动态代理及实现原理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.Java 中的动态代理是什么?
动态代理:对于实现了某个接口的类,增加一些额外的处理, 比如说加日志,加事务等。可以给这个类创建一个代理类,这个类不仅包含原来类方法的功能,还在原来的基础上添加了额外处理的新功能。这个代理类并不是定义好的,而是动态生成的。具有解耦意义,灵活,扩展性强。
动态代理的应用:Spring 的 AOP 、加事务、加权限、加日志。
2.怎么实现动态代理?
- 首先必须有一个接口,还要有一个实现类;
- InvocationHandler接口:处理器(动态代理), 将实现类的对象传递进来;
- Proxy工具类 : 也称为代理类,调用它的newInstance() 产生代理对象。
(1)每一个动态代理类都必须要实现 InvocationHandler 这个接口,将其编译生成代理类的二进制码,利用加载器加载,并将其实例化产生代理对象,最后返回。
(2)每个代理类的实例都关联到了一个 handler,当我们通过代理对象调用一个方法的时候,这个方法的调用就会被转发为由 InvocationHandler 这个接口的 invoke 方法来进行调用。
(3)通过 Proxy.newProxyInstance 创建的代理对象, 是Jvm运行时动态生成的一个对象,它并不是InvocationHandler类型,也不是定义的那组接口的类型,而是在运行时动态生成的一个对象。
3.InvocationHandler接口的invoke 方法
invoke是InvocationHandler这个接口的唯一一个方法:
Object invoke(Object proxy, Method method, Object[] args) throws Throwable
- proxy: 指代所代理的那个真实对象
- method: 指代的是真实对象的某个方法的Method对象
- args:指代的是调用真实对象某个方法时接受的参数
4.Proxy类的newProxyInstance方法
Proxy类的作用是动态创建一个代理对象。它提供了许多的方法,用的最多的是 newProxyInstance 这个方法:
public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces,InvocationHandler handler) throws IllegalArgumentException
- loader:一个 ClassLoader 对象,定义了由哪个 ClassLoader 对象来对生成的代理对象进行加载;
- interfaces:一个 Interface对象的数组,表示给需要代理的对象提供什么接口,如果提供了一组接口给它,那么这个代理对象就宣称实现了该接口(多态),这样就能调用这组接口中的方法了;
- handler:一个 InvocationHandler 对象,表示的是这个动态代理对象在调用方法的时候,会关联到哪一个InvocationHandler 对象上。
这篇关于Java中的动态代理及实现原理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-22项目:远程温湿度检测系统
- 2024-12-21《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》简介
- 2024-12-21后台管理系统开发教程:新手入门全指南
- 2024-12-21后台开发教程:新手入门及实战指南
- 2024-12-21后台综合解决方案教程:新手入门指南
- 2024-12-21接口模块封装教程:新手必备指南
- 2024-12-21请求动作封装教程:新手必看指南
- 2024-12-21RBAC的权限教程:从入门到实践
- 2024-12-21登录鉴权实战:新手入门教程
- 2024-12-21动态权限实战入门指南