什么是AOP?AOP解决了什么问题?

在传统的开发模式中,以下层次的是非常常见的一种,业务层每一个方法都要有重复的事务代码

  

  如何改善这个问题?

AOP希望将A、B 这些分散在各个业务逻辑中的相同代码,通过横向切割的方式抽取到一个独立的模块中

将这些重复性的横切逻辑独立出来很容易,但是如何将独立的横切逻辑 融合到 业务逻辑中 来完成和原来一样的业务操作,这是事情的关键,也是AOP要解决的主要问题。

Spring对事务管理这一点用了很好的处理方式:即将这些代码段抽取出来,然后,在需要事务控制的地方(**类.**方法)添加一个配置,那么,这个方法就会应用事务控制,无需在代码中编写事务代码

AOP的实现机制(动态代理)

1.什么是代理

满足代理的3个基本要求是

1.代理人(中介)

2.需要找代理的主体(用户)

3.需要代理的事情一定要做,但是主体做的不专业或者没时间做

2.什么是动态代理,和静态代理有什么区别

静态代理就是不变的,只针对一种人服务,例如你妈妈帮你找老婆,你是代理的主体,而你妈妈就是代理人,你妈妈只是服务于你,因为你妈妈并不关心其他人有没有老婆,这种你妈帮你找老婆的模式就叫做静态代理,用代码来表示就是 A.class ---->  Proxy.class

而动态代理就是可变的,针对有需求的人服务,例如婚介所帮你找老婆,你是代理的主体,而婚介所就是代理人,婚介所服务于广大单身人民群众,这种婚介所帮你找老婆的模式就叫动态代理,用代码表示  A.class  、B.class、 等等在运行时确定的结果类,都可以传进去  可以------>   Proxy.class

Spring AOP使用动态代理技术在运行期织入增强的代码,使用了两种代理机制,一种是基于JDK的动态代理,另一种是基于CGLib的动态代理。

  1.JDK动态代理

  被代理类实现InvokcationHandler接口 ,原来的类只是一个模板,通过一个配置文件动态读取方法的内容(配合反射) ,通过字节码重组成成为一个新的类,调用时就是调用新的类

  2.CGLIB动态代理(Spring AOP采用)

  不需要任何继承和实现就可以实现动态代理机制,底层原理,通过生成一个动态的类,把动态的类作为子类,继承我们自己的模板类,然后形成新的类,因为子类拥有父类的引用,所以达到动态代理的效果,这样相当于对于开发人员降低要求。

  • aop实现原理其实是java动态代理,但是jdk的动态代理只支持接口代理,所以spring的aop是用cglib这个库实现的,cglib使用了asm这个直接操纵字节码的框架,所以可以做到不实现接口的情况下完成动态代理。
  • 面向切面编程,把散落在程序中的公共部分提取出来,做成切面类,这样的好处在于,代码的可重用,一旦涉及到该功能的需求发生变化,只要修改该代码就行,否则,你要到处修改,如果只要修改1、2处那还可以接受,万一有1000处呢。 AOP底层的东西就是JDK动态代理和CGLIB代理,说白了就是增强类的功能。 最常用的AOP应用在数据库连接以及事务处理上

  

  

转载于:https://www.cnblogs.com/zhuoqingsen/p/8595625.html

深入理解Spring AOP思想相关推荐

  1. 从面向对象设计思想出发理解Spring AOP编程

    都说AOP是OOP(面向对象)的继承与延续,我觉得理解AOP还是得从OOP出发,经历从暴露问题到解决问题的过程. 目录 一. 面向对象设计思想(OOP) (1)概述 1. POP编程 2. OOP的优 ...

  2. Spring AOP思想的理解和简单实现

    Spring之Aop的简单实现 所谓Aop,即Aspect Oriented Programming,面向方面编程.这个概念听起来可能有点抽象,所以在这里我们先引入Aop中的一些术语并结合它们来对Ao ...

  3. 如何理解 Spring AOP 以及使用 AspectJ?

    作者 | 阿文 责编 | 屠敏 出品 | CSDN(ID:CSDNnews) 在 Spring 中 AOP 是一个非常非常重要的概念,那么什么是AOP呢? AOP 即面向切面编程,也可以叫做面向方向编 ...

  4. 彻底理解Spring AOP

    目录 前言 1. AOP概念 2. AOP的实现 3. Spring的IoC理解: 4. Sping知识整理 前言 AOP英文名为Aspect Oriented Programming,意为面向切面编 ...

  5. 正确理解Spring AOP中的Around advice

    Spring AOP中,有Before advice和After advice,这两个advice从字面上就可以很容易理解,但是Around advice就有点麻烦了. 乍一看好像是Before ad ...

  6. java @around_正确理解Spring AOP中的Around advice

    Spring AOP中,有Before advice和After advice,这两个advice从字面上就可以很容易理解,但是Around advice就有点麻烦了. 乍一看好像是Before ad ...

  7. 结合代码彻底理解Spring AOP的术语

    每本Spring的书在介绍AOP之前,总能有一箩筐的术语,看半天似懂非懂,也就没兴趣再继续学习下去,其实并没有这么复杂. 难懂的定义我们就不贴了,就说说咱们通俗的解释,下面让我们结合代码来理清楚各个术 ...

  8. 带你理解Spring AOP

    AOP概述 在我们的日常开发中,除了正常业务逻辑外,还可能经常会需要在业务逻辑的特定位置加入日志,以便于调试和问题分析.但是这种插入日志的逻辑和业务逻辑间并不存在连续性和依赖性,这种逻辑侵入随着项目的 ...

  9. Spring的AOP思想和实现AOP思想的框架AspectJ

    章节目标:详细解释什么是Spring AOP思想和对于该思想实现的AspectJ框架的实现用法. 一.AOP面向切面编程 1.AOP概述 AOP(Aspect Orient Programming)面 ...

最新文章

  1. Java源码详解零:HashMap介绍
  2. 如何及时获得AI顶尖科研团队的最新论文与进展?你需要一份AI内参!
  3. JavaScript使用ACTIVEX控件引起崩溃问题的解决
  4. 精通python-轻松打造11周精通python计划(完结) | 软件库
  5. FATFS文件系统框架及源码分析
  6. Oracle 11g中文版高清视频教程
  7. Base64 的那些事儿
  8. JavaScript中的运算符
  9. html文本框最小数字,HTML5中的数字类型的输入框:数字选择器
  10. TensorFlow框架案例实战
  11. .vue文件 转换成html,在vue中把含有html标签转为html渲染页面的实例
  12. linux环境ubuntu: pushd: not found
  13. 互联网网站采集工具大比拼和选择指南
  14. 基于SSM实现台球厅计时收费系统
  15. crm系统需要的服务器,灵当CRM管理系统运行环境-CRM服务器配置
  16. 前端必备:六款CSS工具让代码充满魅力
  17. 新一配:程序员在地铁上写代码被路人吐槽:有什么好装的!网友评论炸锅了
  18. 商城尺码选择效果 jquery
  19. 同步升压与非同步升压区别
  20. Java基础之面向对象的概念 继承---组合----枚举类

热门文章

  1. 北大OJ百练——4075:矩阵旋转(C语言)
  2. RHEL7配置本地yum源
  3. Java里的字符串, String类简单介绍.
  4. Gentoo 安装日记 05 (磁盘分区)
  5. 计算机二级没过学校要重修吗,如果学校说计算机二级没过不给发学位证改怎么办...
  6. arduino雨滴传感器原理_Arduino酸度计(PH计)
  7. php数组只保留键值,php合并数组并保留键值的实现方法
  8. Seata 新特性,APM 支持 SkyWalking
  9. 阿里宣布成立云原生技术委员会,释放哪些趋势信息?
  10. 应用系统瓶颈排查和分析的思考-Arthas 实战