Java JDK 动态代理的使用方法示例

发布时间 - 2026-01-11 02:23:37    点击率:

本文主要和大家分享介绍了关于Java JDK 动态代理使用的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍:

前言

代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问。代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。

Spring AOP的实现对于接口来说就是使用的JDK的动态代理来实现的,而对于类的代理使用CGLIB来实现。

JDK的动态代理,就是在程序运行的过程中,根据被代理的接口来动态生成代理类的class文件,并加载运行的过程。

使用

首先创建接口

public interface Subject {

 void test();
}

创建实现类

public class SubjectImpl implements Subject {

 @Override
 public void test() {
 System.out.println("This is test method");
 }
}

创建InvocationHandler实现类

public class SubjectInvocationHandler implements InvocationHandler {

 private Subject target;

 public SubjectInvocationHandler(Subject subject) {
 this.target = subject;
 }

 @Override
 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

 System.out.println("before method!");

 Object result = method.invoke(target, args);

 System.out.println("after method!");

 return result;
 }
}

最后调用:

public class DynamicProxy {


 public static void main(String args[]) {

 Subject subject = new SubjectImpl();

 Subject proxy = (Subject) Proxy.newProxyInstance(SubjectImpl.class.getClassLoader(), SubjectImpl.class.getInterfaces(), new SubjectInvocationHandler(subject));
 proxy.test();

 System.out.println(proxy);
 }
}

运行结果:

before method! 
This is test method 
after method! 

总结

1.通过实现InvocationHandler接口,在invoke方法中实现代理逻辑;

2.通过Proxy的newProxyInstance方法生成代理类,这里主要是根据被代理类的接口类型,通过反射创建代理类;

关于分析JDK动态代理这里有一篇很好的文章:Java JDK动态代理(AOP)的实现原理与使用详析

好了,以上就是这篇文章的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# java  # jdk动态代理  # jdk代理  # 深入理解java动态代理的两种实现方式(JDK/Cglib)  # java动态代理(jdk与cglib)详细解析  # Java JDK动态代理(AOP)的实现原理与使用详析  # java jdk动态代理详解  # Java JDK动态代理的基本原理详细介绍  # java代理 jdk动态代理应用案列  # Java JDK动态代理实现原理实例解析  # 详解Java JDK动态代理  # Java中JDK动态代理的超详细讲解  # 来实现  # 很好  # 是一种  # 好了  # 相关内容  # 他对  # 为其  # 这篇文章  # 谢谢大家  # 提供一个  # 大家分享  # 过程中  # 发消息  # 主要是  # 加载  # 并转  # 就是在  # 有疑问  # getClassLoader  # AOP 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在阿里云域名上完成建站全流程?  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  HTML 中如何正确使用模板变量为元素的 name 属性赋值  浅谈javascript alert和confirm的美化  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  Laravel如何优化应用性能?(缓存和优化命令)  javascript基于原型链的继承及call和apply函数用法分析  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】  详解阿里云nginx服务器多站点的配置  手机软键盘弹出时影响布局的解决方法  用v-html解决Vue.js渲染中html标签不被解析的问题  简单实现jsp分页  iOS正则表达式验证手机号、邮箱、身份证号等  Python图片处理进阶教程_Pillow滤镜与图像增强  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  如何撰写建站申请书?关键要点有哪些?  详解jQuery中的事件  如何快速搭建安全的FTP站点?  魔毅自助建站系统:模板定制与SEO优化一键生成指南  桂林网站制作公司有哪些,桂林马拉松怎么报名?  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  如何在新浪SAE免费搭建个人博客?  个人摄影网站制作流程,摄影爱好者都去什么网站?  Laravel如何使用Service Container和依赖注入?(代码示例)  如何在云主机快速搭建网站站点?  jquery插件bootstrapValidator表单验证详解  长沙做网站要多少钱,长沙国安网络怎么样?  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  微信h5制作网站有哪些,免费微信H5页面制作工具?  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  中山网站制作网页,中山新生登记系统登记流程?  Python数据仓库与ETL构建实战_Airflow调度流程详解  javascript中对象的定义、使用以及对象和原型链操作小结  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  Laravel怎么实现一对多关联查询_Laravel Eloquent模型关系定义与预加载【实战】  Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用  如何自定义建站之星网站的导航菜单样式?  三星、SK海力士获美批准:可向中国出口芯片制造设备  Laravel如何实现用户注册和登录?(Auth脚手架指南)  EditPlus中的正则表达式 实战(1)  香港服务器建站指南:免备案优势与SEO优化技巧全解析  如何在阿里云高效完成企业建站全流程?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?