前提

最近看到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方法,使功能增强。

SpringAOP之动态代理相关推荐

  1. SpringAOP JDK动态代理

    1.本篇博客的背景和目的 目前我本人正在学习SpringFramework的知识,这也是这个专栏的主题.我前面的几篇博文中,简单的认识了一下SpringFramework,记录了SpringFrame ...

  2. 注解的方式实现动态代理基于SpringAOP

    1.配置spring容器 导入jar包 com.springsource.net.sf.cglib-2.2.0.jar com.springsource.org.aopalliance-1.0.0.j ...

  3. SpringAOP静态代理和动态代理

    代理模式应用于SpringAOP. SpringAOP.即面向切面的编程范式.多用于权限控制,异常处理,日志管理等场景.主要作用是分离功能性需求和非功能性需求,减少代码冗余.我们在使用的时候可以集中处 ...

  4. AOP 拦截器 JDK动态代理机制 struts2 mybatis spring-aop

    struts2拦截器兑现原理(转) struts2拦截器实现原理(转) 第一步:创建目标对象的接口 /** * 目标对象的接口 JDK的动态代理要求目标对象必须实现一个接口 *  * @author ...

  5. Java Spring-AOP动态代理-JDK和CGlib实现

    Java Spring-AOP CGlib和JDK动态代理实现 编码是为了解决生活中的问题,譬如现在我想用筷子吃饭的时候看手机,那么首先会有两个对象. 现在如果是面向对象编程思想,我们会new一个筷子 ...

  6. spring AOP原理分析:静态代理;JDK实现接口动态代理;Cglib继承父类代理;SpringAop的责任链模式调用

    普通静态代理 代理类和真实类都需要实现同一个接口 接口 package com.fchan.layui.represent.service; /*** 静态代理demo*/ public interf ...

  7. Spring-AOP动态代理技术(底层代码)

    1.JDK代理:基于接口的动态代理技术 目标对象必须有接口,目标对象有什么方法,目标接口就有什么方法, 运行期间基于接口动态生成代理对象,所以代理对象也就有目标对象同样的方法. 注意:以下代码只是底层 ...

  8. SpringAOP的CGLIB动态代理的底层原理实现

    欢迎加入java学习讨论群:725562382 CGLIB动态代理: CGLIB(Code Generation Library)是一个开源项目!是一个强大的,高性能,高质量的Code生成类库,它可以 ...

  9. SpringAop篇 (1) AOP 基础之动态代理的实现

    介绍 Spring AOP 主要通过 动态代理 来实现的,所以我们需要在介绍 AOP 用法之前,先来介绍下动态代理的用法以及本质. 对于动态代理的理解可以借鉴普通代理模式.我们普通的Java代理需要为 ...

  10. SpringAop动态代理的两种实现方式

    Spring的面向切面编程也是基于动态代理来实现的 静态代理:也就是自己手动创建的代理对象 动态代理:也就是在程序运行中通过配置参生的 那么Spring的AOP也就是面向切面编程,就是基于动态代理来实 ...

最新文章

  1. Linux pip安装包。解决:You should consider upgrading via the 'pip install --upgrade pip' command.
  2. Python导入其他文件中的.py文件 即模块
  3. 【牛客 - 696C】小w的禁忌与小G的长诗(dp 或 推公式容斥)
  4. 真格量化——50期权历史波动率策略
  5. linux进程运行队列,Linux进程调度中队列的使用
  6. Struts知识问答
  7. 营业执照吊销后,股权何去何从?
  8. android 消息系统Handler、MessageQueue、Looper源代码学习
  9. 萤石云平台接入_前端接入萤石云视频
  10. 运用ssis组件实现邮件发送,内容来源于数据库表
  11. 漏洞利用六:Linux系统漏洞利用
  12. 只有那些不断充实自己的人,才有机会在往后的日子里持续地被雇用
  13. 高仿微信6.5.7(融云版)
  14. JDBC心得体会--总结
  15. vscode如何同时运行多个vue项目
  16. Hinton 最新研究:神经网络的未来是前向-前向算法
  17. (1.5.1.3)编程之美:一摞烙饼的排序
  18. 《缠中说禅108课》49:利润率最大的操作模式
  19. matlab画y x 2,matlab怎么绘制z=sqrt(x^2 y^2)的图像
  20. 有哪些初学者程序员不知道的小技巧?

热门文章

  1. 大学计算机基础通俗易懂教材,大学计算机基础(21世纪高等学校计算机规划教材)...
  2. windows系统安装wget指令
  3. Python 之字典(dict)根据 value 获取 key
  4. 奈奎斯特与香农定理_奈奎斯特定律和香农定理
  5. IDEA的类注释模板
  6. 一分钟教会你固态硬盘数据恢复方法
  7. Coordinate Transformations(坐标系的变换)
  8. 二进制与十六进制转换对照表
  9. android 读写txt文件,Android:将文本写入txt
  10. [007]爬虫系列 | RPC调用简单示例