代理模式应用于SpringAOP。

SpringAOP。即面向切面的编程范式。多用于权限控制,异常处理,日志管理等场景。主要作用是分离功能性需求和非功能性需求,减少代码冗余。我们在使用的时候可以集中处理某一个关注点或者横切逻辑;可以很方便地添加/删除关注点,减少对业务代码的侵入,增强代码的可读性和可维护性。

SpringAOP是基于代理模式设计的,代理模式又分为静态代理和动态代理。静态代理是设计模式中的传统的代理模式。传统的静态代理会产生很多代码冗余。目标类和代理类共同实现接口的方法。当我们一个类有很多方法要委托给代理进行执行的时候,或者当我们的目标类有新增了接口的实现方法时,就要不断的修改代理类。这是不合理的,甚至当这些方法的代理逻辑都相同的时候,就会重复很多代码。为了解决这个问题基于反射机机制的动态代理模式就出现了。

动态代理模式分为两种:

1)基于接口的JDK动态代理。

实现InvocationHandler的invoke方法。

客户端使用Java.lang.reflect.Proxy动态代理类产生动态代理类的对象。

newProxyInstance实现过程:获得字节码(getProxyClass0/ClassFactoryProxy/proxygenerator)---创建对象(newInstance)

注意,接口类的Class是一个数组,也就是支持不同的接口的方法。也就是说,代理类在之后就无需修改。

2)基于继承的CGlib的动态代理

如果目标类没有实现接口,那就要选择使用CGLIB来动态代理目标类,有接口也行。

编写织入逻辑方法,要实现MethodInterceptor,重写intercept方法

这里说的继承是让动态产生的代理继承目标类。

setSupperClass()   将代理类继承目标类;

setCallback()   织入代理逻辑方法(实现MethodInterceptor方法)

create()  创建动态代理类

CGLIB会让生成的代理类继承当前对象,

并在代理类中对代理方法进行强化处理(前置处理、后置处理等)。
在CGLIB底层 底层实现是通过ASM字节码处理框架来转换字节码并生成新的代理类

注意,CGLIB是通过继承的方式做的动态代理,因此如果某个类被标记为final,那么它是无法使用CGLIB做动态代理的。


JDK代理和CGlib代理得区别:

JDK基于反射机制,适用于目标类实现接口方法的场景,

CGlib基于继承的形式,获得目标类的所有内容。如果目标类为final、static,则无法继承;如果方法为final、private则也无法使用CGlib.

SpringAOP静态代理和动态代理相关推荐

  1. Spring系列之静态代理、动态代理、cglib代理与Spring AOP的处理

    本章内容 代理的概念及理解 如何实现静态代理 如何实现动态代理 静态代理与动态代理有什么区别与优缺点 JDK动态代理如何实现 cglib动态代理如何实现 JDK动态代理与cglib动态代理的区别 Sp ...

  2. Java设计模式(五)代理设计模式—静态代理—JDK动态代理—Cglib动态代理

    文章目录 什么是代理模式 代理模式应用场景 代理的分类 静态代理 什么是静态代理 深入解析静态代理 小结 动态代理 什么是动态代理 JDK动态代理 原理和实现方式 代码实现 优缺点 Cglib动态代理 ...

  3. Spring AOP中的静态代理和动态代理的原理和实践

    对于最近博主最近写博客的兴致大发,我也在思考:为什么而写博客?在互联网时代,无论你是牛人大咖,还是小白菜鸟,都有发表自己看法的权利.无论你是对的还是错的,都会在这个平台上找到答案.所以,我会尽可能去写 ...

  4. 静态代理、动态代理概念及使用

    文章目录 1. 为什么要用静态代理 2. 静态代理的实现 3. 静态代理的缺点 4. 动态代理 4.1 JDK动态代理 4.1.1 InvocationHandler 4.1.2 Class 4.1. ...

  5. java静态代理与动态代理

    2019独角兽企业重金招聘Python工程师标准>>> 代理模式是java常见的设计模式.其目的是为其他对象提供一个代理以控制对某个真实对象的访问.通过代理类这一中间层,有效控制对真 ...

  6. 【java项目实战】代理模式(Proxy Pattern),静态代理 VS 动态代理

    这篇博文,我们主要以类图和代码的形式来对照学习一下静态代理和动态代理.重点解析各自的优缺点. 定义 代理模式(Proxy Pattern)是对象的结构型模式,代理模式给某一个对象提供了一个代理对象,并 ...

  7. Java、Android静态代理与动态代理

    代理 (1) 什么是代理? 大道理上讲代理是一种软件设计模式,目的地希望能做到代码重用.具体上讲,代理这种设计模式是通过不直接访问被代理对象的方式,而访问被代理对象的方法.这个就好比 商户----&g ...

  8. Java设计模式学习06——静态代理与动态代理(转)

    原地址:http://blog.csdn.net/xu__cg/article/details/52970885 一.代理模式 为某个对象提供一个代理,从而控制这个代理的访问.代理类和委托类具有共同的 ...

  9. 架构设计之设计模式 (二) 静态代理和动态代理--间接“美”

    生活中有很多例子是间接来控制和访问的,比如你找一个人不自己亲自去,而是让别人代替去做这就是最简单的代理模式,是一种间接通信的例子,对象间的间接通信也同样是面向对象设计中的一条重要的"审美观& ...

最新文章

  1. cd、mkdir、rmdir、touch、rm命令,绝对路径与相对路径
  2. spring源码分析之spring-jdbc模块详解
  3. android点击隐藏控件,Android编程实现点击EditText之外的控件隐藏软键盘功能
  4. Win10解决无法访问其他机器共享的问题
  5. 看门狗寄存器c语言代码_「正点原子NANO STM32F103开发板资料连载」第十一章 看门狗实验...
  6. AutoML 在表数据中的研究与应用
  7. BZOJ1734: [Usaco2005 Feb]Aggressive cows 愤怒的牛
  8. 解决Entry fileTemplates//Singleton.java.ft not found in C:/Dev/android-studio/lib/resources_en.jar
  9. 命令行shell 用于SQLite
  10. Unity实现IOS原生分享
  11. 《Python神经网络编程》
  12. 使用webstorm操作git
  13. SQL SERVER 读取 XML 数据
  14. UI常见面试题-整体素养篇
  15. 投资 2 -- 新股民必须树立正确的价值观
  16. 过万 star 高星项目的秘密——GitHub 热点速览 Vol.39
  17. vim:修改vim录制的宏
  18. git reset, git status, git clean, .gitignore, git diff, git restore 的关系梳理
  19. Azure Information Protection信息保护(AIP)/Azure Rights Management权限管理(RMS)
  20. 计算机网络自顶向下--网络层

热门文章

  1. vCenter的安装与部署
  2. 微信公众平台开发(24) 自定义菜单功能开发
  3. net类库中发送电子邮件的方法总结
  4. 快速傅里叶变换Matlab示例
  5. C++ 模板详解(二)
  6. 论文笔记:Git Loss
  7. 【机器学习入门笔记9:TensorFlow四则运算】20190216
  8. 调用Cython时报错: More than one filename match found for utility code Capsule
  9. string 中的offset_Kafka+Spark Streaming管理offset的两种方法
  10. TextView显示不同颜色的文本,及文本变色可点击工具类