动态代理


有不懂的可以留言我,虽然我也很菜

动态代理概述及实现

动态代理概述

  • 代理: 本来应该自己做的事情,请了别人来做,被请来做事的人叫做代理对象.

  • 举例: 春节回家买不到车票请人代买,找房子懒得自己跑就通过中介找.

  • 动态代理: 在程序运行过程中产生的这个代理对象,而程序运行过程中产生对象其实就是反射的内容,所以,动态代理就是通过反射来生成的一个代理.

在java中java.lang.reflect包下提供了Proxy类和InvocationHandler接口,通过使用这个类和接口可以生成动态代理对象,JDK提供的代理只能针对接口做代理,对类生成动态代理对象可以通过cglib,在spring那里有提到,我晚点写.

创建动态代理对象流程:

  1. Proxy类中的方法: **public static Object newProxyInstance(ClassLoader loader, Class <?> [] interfaces, InvocationHandler h)**会生成动态代理对象,也就是参数中的接口的代理实例.
  • loader表示被代理对象的类加载器,首先我们要拿到代理对象的字节码文件对象,然后通过Class的静态方法getClassLoader() 方法就可以得到类加载器了.

  • interfaces表示被代理对象实现的接口.

  1. 最终会调用**InvocationHandler(它是由代理实例的调用处理程序实现的接口,也就是上面的h实现的接口)中的Object invoke​(Object proxy, Method method, Object[] args)**方法,实现在代理实例上处理方法调用并返回结果,完成动态代理.
  • proxy这个参数是被代理对象,不是代理对象哈,比如我请人买票,我就是被代理对象,这里的proxy指的是我.

  • method参数表示要执行的方法,比如我请人买票,这个方法就是买票.

  • Object[] args表示method方法的参数,比如我请人买票,那么起始地址和到达地址就可以作为参数,如果method方法没有参数就不给就可以了.

  • 我们在通过动态代理实现功能的时候,代理类要实现InvocationHandler这个接口并重写其invoke方法,这样才能作为调用处理程序来实现代理.

利用动态代理实现权限校验和日志记录代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值