Java Proxy动态代理
常见使用场景(Spring AOP)
简单例子
包结构
User类
UserService接口
UserService接口实现类
我的动态代理类(实现InvocationHandler接口)
测试使用动态代理的类
测试我的动态代理运行结果
解释
我们的动态代理类实现了InvocationHandler接口
重写invoke方法
使用示范
在原有接口方法被调用方法执行的基础之上,在执行原有方法前加入了beforeSave()方法(自己写的),
在执行之后调用了finishSave()方法,在调用原来接口中方法的基础之上调用了其他方法,实现我们所需的功能,
比如计算该方法执行所需时间可以在方法前后获取时间计算差值、日志记录
避免了使用代码去入侵原来封装好的对象,实现了我们要做的事情并且没有污染模块的源码
关键代码解释:
UserService proxy=(UserService)Proxy.newProxyInstance(userService.getClass().getClassLoader(),new Class[]{UserService.class},userServiceProxy);
调用Proxy的newProxyInstance实例化一个新的动态代理对象
参数解释
userService.getClass().getClassLoader() 被代理对象的classLoader
new Class[]{UserService.class}被代理的所有方法的接口数组(UserService是一个接口)
userServiceProxy我的动态代理(实现了InvocationHandler接口)
本文来自博客园,作者:HumorChen99,转载请注明原文链接:https://www.cnblogs.com/HumorChen/p/18039780
分类:
Java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~