java中的动态代理

文章目录

动态代理

概念:代理类在程序运行时创建的代理方式被称为动态代理。

作用:在不改变源码的情况下,对已有的方法进行运行时增强。

分类:

  1. 基于接口的动态代理。
  2. 基于子类的动态代理。

基于接口的动态代理:

要求:被代理类至少实现一个接口。

涉及的类:Proxy

创建对象的方法:newProxyInstance

方法的参数:

  1. 类加载器:ClassLoader,加载代理对象字节码,和被代理对象用一个类加载器
  2. 字节码数组:Class[] 代理对象和被代理对象要具有相同的行为,实现相同接口
    • 如果被代理对象是一个实现类:对象.getClass().getinterfaces()
    • 如果被代理对象是一个接口:new Class[]{interface}
  3. 增强方法的接口:InvocationHandler,如何增强,如何代理。
实现InvocationHandler接口,需要重写的方法,实现逻辑
    
public Object invoke(Object proxy, Method method, Object[] args)
 //proxy:代理对象的引用
//method:当前执行的方法
//args::执行当前方法所需的参数   

基于子类的动态代理:

要求:被代理类不能是最终类。

涉及类:Enhancer

创建对象的方法:create

方法的参数:

  • Class:加载代理对象字节码,使用的是被代理对象的字节码。
  • Callback:增强方法的接口,和InvocationHandler一样。callBack是顶层接口,我们需要new MethodInterceptor。
new MethodInterceptor需要实现的方法
    public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy)
    //proxy:代理类对象引用
    //method:当前执行的方法
    //args:执行当前方法需要的参数
    //methodProxy:执行当前方法的代理类对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值