栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringAOP之动态代理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringAOP之动态代理

前提

最近看到Spring-Aop(面向切面编程)的实现基于动态代理,特此记录学习一下。

什么是动态代理?
  • 代理:当目标对象无法直接访问,创建一个客户端和目标对象之间的中介,这个中介可以被称为代理。
  • 动态: 使用反射机制,在程序执行的时候,创建代理类对象。
    动态代理:在程序执行中,利用jdk的反射机制,创建代理类对象,并动态指定要代理的对象
动态代理的作用
  1. 在不改变已有代码的基础上,通过代理来横向拓展增强其他的功能;
    (A写好了一个功能,你可以使用,但是A的功能不满足你的要求,因此可以通过代理A的功能代码,而不用修改原有的代码进行增加)
  2. 当目标类不允许直接访问(a类实现功能调用c类,但c类不允许a调用),因此可以创建代理b,让a访问b,b再访问c;
  3. 减少重复的代码;
  4. 专注业务逻辑代码;
  5. 解耦,让业务代码与非业务代码分离。
实现代理的方式? 1.静态代理

特点:

  • 代理类需要自己手动创建
  • 被代理的目标类是确定的

缺点:

  • 当需要被代理的目标类增加时,代理类也会成倍增加
  • 当接口中功能增加或者修改,对代理类、被代理类都会造成影响
2.动态代理

方式1:jdk动态代理
具体:基于java.lang.reflect的三个类:

  • invocationHandler
  • Method
  • Proxy

要求:目标类是一个实现接口类,必须实现某个接口
方式2:cglib动态代理
要求:目标类能被继承,即class和method不能是final

3.具体实现步骤

jdk动态代理实现步骤:

  1. 创建接口,定义目标类要实现的方法(功能)
  2. 创建目标类实现接口
  3. 创建InvocationHandler接口的实现类(代理类),重写invoke方法,在方法中完成需要代理的功能;
  4. 利用Proxy类创建代理对象------>newProxyInstance
  5. 将类加载器和实现接口给代理对象
  6. 利用代理对象调用目标类方法,自动调用invoke方法,使功能增强。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/988277.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号