JDK动态代理

代理

代理模式 是指,一个对象不适合或不能直接访问另一个对象,而代理对象可以在客户类和目标类之间起到中介作用

代理功能

  • 功能增强(新增功能)
  • 控制访问

代理方式

  1. 静态代理
  • 自己手工实现,自己创建一个java类
  • 要代理的目标类是确定的

    缺点:当目标类增加时,代理类会成倍增加
    目标类新增方法时,代理类需要完成目标类的所有方法,错误率提示
  1. 动态代理

    优点:代理数量少,当接口中方法改变时,不影响代理类

    实现方式:
    • JDK动态代理
    • cglib动态代理

cglib动态代理

  • cglib是第三方工具库,创建代理对象(原理:继承)
  • 我们实现的子类重写父类中同名的方法,实现功能的修改。(子类不能使用final)

JDK动态代理

  • 使用JDK的反射机制,创建代理类对象,并动态的指定要代理的目标类(目标类必须有实现接口) 反射包 java.lang.reflect
  • 里面的三个类 InvocationHandler , Method ,Proxy

InvocationHandler接口(调用处理器)

invoke()方法

  • 在该方法中实现调用目标方法和功能增强的作用

方法原型:

public Object invoke(Object proxy, Method method, Object[] args)
整个函数参数无需人为赋值,由JDK提供

Method类

  • 通过该类执行目标方法
Method.invoke(目标对象,参数);

Proxy类

  • 创建代理对象(后续需要转化成接口使用)

newProxyInstance() 方法

  • 创建代理对象,等同于new class();的功能
public static Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h)

参数解析

ClassLoader类加载器,向内存中加载对象
内部调用类a a.getClass().getClassLoader() 来获取类加载器
Class<?>[] interfaces接口,目标对象实现的接口,也是反射获取的
InvocationHandler我们自己写的InvocationHandler接口实现类

函数返回值:

代理对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值