Java代理模式

本文详细介绍了Java代理模式,包括静态代理的编译时创建代理类、动态代理(基于接口和CGLIB)的运行时生成,以及它们在RMI、事务管理和延迟初始化中的应用。
摘要由CSDN通过智能技术生成

Java代理模式

静态代理

 Java代理模式是一种设计模式,它为其他对象提供一个代理来控制对这个对象的访问,代理模式在Java开发中广泛使用,尤其是远程方法调用RMI,事务管理,延迟初始化等场景,代理模式主要分为静态代理和动态代理两种形式

  • 静态代理在编译时就已经确定了代理类和目标对象的关系。
  • 使用静态代理,需要为每一个被代理的类手动创建一个代理类,代理类需要实现与目标对象相同的接口,并在内部维护一个目标对象的引用,通过代理类对目标对象方法进行增强,首先额外的功能
  • 步骤:
    • 定义接口:确定目标对象和代理对象共同遵循的接口
    • 实现接口:目标对象实现接口的方法
    • 创建代理类:代理类同样实现该接口,并在内部维护一个对象实际目标对象的引用,通过构造方法传入目标对象,代理类在实现接口方法的时候,可以在调用目标对象的方法前后添加额外的处理逻辑

动态代理

  • 与静态代理,动态代理在运行的时候动态生成代理类和对象
  • Java提供了两种动态代理:基于接口的动态代理和基于类的动态代理
  • 基于接口的动态代理:
    • 创建一个实现了InvocationHandler接口的处理器类:该处理器类关联了真实对象,实现了invoke方法,invoke方法中封装了对真实对象方法的调用
    • 通过Proxy.newProxyInstance方法动态创建代理对象:这个方法需要加载真实对象的类加载器、真实对象实现的接口及上一步创建的处理器对象,返回一个实现了指定接口的代理实例
  • 基于类的动态代理:
    • CGLIB(Code Generation Library)是一个第三方代码生成库,通过继承的方式实现动态代理,因此不需要接口。它在运行时动态生成被代理对象的子类,并在子类中重写父类方法,通过方法拦截技术插入增强代码

静态代理的步骤

  • 定义一个接口:确定代理和真实对象的共同行为
  • 实现该接口创建真实对象:具体实现接口的功能
  • 创建一个代理类也实现这个接口:用来包装真实对象,同时在调用真实对象的方法前后,可以添加自己的操作
  • 在代理类中维护一个真实对象的引用,通过构造方法传入真实对象
  • 调用接口的方法,实际上执行的是代理类的方法

动态代理的步骤

  • 定义一个或者多个接口以及实现类
  • 创建一个实现InvocationHandler接口的类,他必须实现invoke方法
  • 通过调用Proxy.newProxyInstance 方法 创建动态代理对象:
    • 类加载器(可以从已经加载的对象中获取)
    • 代理需要实现的接口列表(至少需要实现一个接口)
    • InvocationHandler 实例
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少写代码少看论文多多睡觉

求打赏,求关注,求点赞

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值