动态代理有哪些实现方式?

简介: 动态代理是一种在运行时创建代理对象的技术,它可以在不修改目标对象的情况下,通过代理对象来增强目标对象的功能。在Java中,有两种主要的动态代理实现方式:JDK动态代理和CGLIB动态代理。
  1. JDK动态代理:
    JDK动态代理是基于接口的代理,它要求目标对象实现一个接口。JDK动态代理使用Java的反射机制来创建代理对象。下面是JDK动态代理的实现步骤:
    (1) 定义一个接口:首先需要定义一个接口,该接口是目标对象和代理对象都要实现的。
    (2) 实现InvocationHandler接口:创建一个实现InvocationHandler接口的类,该类负责实现代理逻辑。
    (3) 使用Proxy类创建代理对象:通过Proxy类的静态方法newProxyInstance()创建代理对象,该方法需要传入一个类加载器、一个接口数组和一个InvocationHandler对象。
    (4) 调用代理对象的方法:通过代理对象调用方法时,实际上会调用InvocationHandler的invoke()方法,代理逻辑就在该方法中实现。

JDK动态代理的优点是它是Java官方提供的标准动态代理实现方式,使用简单,无需引入第三方库。但它的缺点是只能代理实现了接口的类,无法代理没有实现接口的类。

  1. CGLIB动态代理:
    CGLIB动态代理是基于类的代理,它可以代理没有实现接口的类。CGLIB动态代理使用字节码生成技术来创建代理对象。下面是CGLIB动态代理的实现步骤:
    (1) 导入CGLIB库:首先需要导入CGLIB库的依赖。
    (2) 创建Enhancer对象:创建Enhancer对象,并设置目标类作为其父类。
    (3) 设置回调函数:通过调用setCallback()方法,设置MethodInterceptor接口的实现类作为回调函数。
    (4) 创建代理对象:通过调用create()方法,创建代理对象。
    (5) 调用代理对象的方法:通过代理对象调用方法时,实际上会调用MethodInterceptor的intercept()方法,代理逻辑就在该方法中实现。

CGLIB动态代理的优点是它可以代理没有实现接口的类,使用灵活。但它的缺点是需要引入CGLIB库,增加了项目的依赖。

选择使用哪种动态代理方式应根据具体需求和场景来决定。如果目标对象已经实现了接口,推荐使用JDK动态代理;如果目标对象没有实现接口,或者需要对目标对象的类进行代理,推荐使用CGLIB动态代理。

目录
相关文章
|
XML Java 编译器
java aspectjrt AOP 用法
java aspectjrt AOP 用法
416 0
|
存储 开发工具 git
helm v2 源大全
helm v2 源大全
|
数据库
如何在Seata框架中配置分布式事务的隔离级别?
总的来说,配置分布式事务的隔离级别是实现分布式事务管理的重要环节之一,需要认真对待和仔细调整,以满足业务的需求和性能要求。你还可以进一步深入研究和实践 Seata 框架的配置和使用,以更好地应对各种分布式事务场景的挑战。
617 160
|
11月前
|
供应链 算法 搜索推荐
从公布的前十一批其他算法备案通过名单分析
2025年3月12日,国家网信办发布算法备案信息,深度合成算法通过395款,其他算法45款。前10次备案中,深度合成算法累计3234款,其他类别647款。个性化推送类占比49%,涵盖电商、资讯、视频推荐;检索过滤类占31.53%,用于搜索优化和内容安全;调度决策类占9.12%,集中在物流配送等;排序精选类占8.81%,生成合成类占1.55%。应用领域包括电商、社交媒体、物流、金融、医疗等,互联网科技企业主导,技术向垂直行业渗透,内容安全和多模态技术成新增长点。未来大模型检索和多模态生成或成重点。
从公布的前十一批其他算法备案通过名单分析
|
负载均衡 算法 Java
除了 Ribbon,Spring Cloud 中还有哪些负载均衡组件?
这些负载均衡组件各有特点,在不同的场景和需求下,可以根据项目的具体情况选择合适的负载均衡组件来实现高效、稳定的服务调用。
1205 61
|
敏捷开发 开发框架 数据可视化
敏捷+看板:项目管理效率提高新办法
敏捷开发遇上看板管理,双引擎驱动项目高效协作,助你轻松掌控任务流!
274 2
敏捷+看板:项目管理效率提高新办法
|
存储 Java API
动态代理实现的两种方式
【10月更文挑战第10天】
248 2
|
Java Maven
springboot项目打jar包后,如何部署到服务器
springboot项目打jar包后,如何部署到服务器
1212 1
|
传感器 JavaScript 前端开发
TypeScript高频面试题汇总
大家好,我是 CoderBin,本次总结了关于TypeScript的一些高频面试题,希望对大家有所帮助,谢谢。 如果文中有不对、疑惑的地方,欢迎在评论区留言指正🌻
2742 1
TypeScript高频面试题汇总