什么是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应用在数据库连接以及事务处理上

  

  

深入理解Spring AOP思想的更多相关文章

  1. 深入理解Spring AOP之二代理对象生成

    深入理解Spring AOP之二代理对象生成 spring代理对象 上一篇博客中讲到了Spring的一些基本概念和初步讲了实现方法,当中提到了动态代理技术,包含JDK动态代理技术和Cglib动态代理 ...

  2. spring 理解Spring AOP 一个简单的约定游戏

    应该说AOP原理是Spring技术中最难理解的一个部分,而这个约定游戏也许会给你很多的帮助,通过这个约定游戏,就可以理解Spring AOP的含义和实现方法,也能帮助读者更好地运用Spring AOP ...

  3. 理解Spring AOP的实现方式与思想

    Spring AOP简介 如果说IOC是Spring的核心,那么面向切面编程就是Spring最核心的功能之一了,在数据库事务中,面向切面编程被广泛应用. AOP能够将那些与业务无关,却为业务模块所共同 ...

  4. 轻松理解 Spring AOP

    目录 Spring AOP 简介 Spring AOP 的基本概念 面向切面编程 AOP 的目的 AOP 术语和流程 术语 流程 五大通知执行顺序 例子 图例 实际的代码 使用 Spring AOP ...

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

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

  6. 曹工说Spring Boot源码(21)-- 为了让大家理解Spring Aop利器ProxyFactory,我已经拼了

    写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...

  7. 如何简单理解spring aop和事务

    用比喻的方法理解吧: 初学者的理解,仅仅为了个人好记 aop:由三部分组成:工具箱,工人,为工人分配工具 tx事务:由四部分组成:管理者,制度,工人,向工人通知管理制度  为什么这样理解呢?个人觉得好 ...

  8. 深入理解Spring AOP 1.0

    本文相关代码(来自官方源码spring-test模块)请参见spring-demysify org.springframework.mylearntest包下. 统称能够实现AOP的语言为AOL,即( ...

  9. 深入理解Spring MVC 思想

    目录  一.前言二.spring mvc 核心类与接口三.spring mvc 核心流程图 四.spring mvc DispatcherServlet说明 五.spring mvc 父子上下文的说明 ...

随机推荐

  1. Interpreting NotifyCollectionChangedEventArgs zz

    If you’ve ever consumed INotifyCollectionChanged.CollectionChanged, then you’ve run into some inadeq ...

  2. APM飞控学习之路的资料

    飞控学习之路的资料 https://blog.csdn.net/u010682510 博客资料 https://blog.csdn.net/qq_26573899/article/category/7 ...

  3. mysql数据表增删改查

    http://www.runoob.com/mysql/mysql-tutorial.html 一.MySQL 创建数据表 创建MySQL数据表需要以下信息: 表名 表字段名 定义每个表字段 语法 以 ...

  4. docker安装,无法正常启动

    报错信息: Job for docker.service failed because the control process exited with error code. See "sy ...

  5. LeetCode 26 Remove Duplicates from Sorted Array [Array/std::distance/std::unique] <c++>

    LeetCode 26 Remove Duplicates from Sorted Array [Array/std::distance/std::unique] <c++> 给出排序好的 ...

  6. oracle登录管理员创建数据库和表空间

    登录管理员最高权限账号 cmd输入sqlplus 回车,或者直接打开sqlplus 用户名:sys 密码:sys as sysdba 1.首先,创建(新)用户: create user usernam ...

  7. 二分- Count on Canton

    题目: 代码: 是一个蛇形数列,把题目上的那组数倒过来看成一个正三角形. 第一行有1个数,1-2行有三个数,1-4行有6个数,1-4行有10个数,1-5行有15个数..... 现在要求第n个数是多少, ...

  8. 【盛派周三分享-2019.2.20】开放分享内容,本期主题:《SCF、DDD及相关架构思想讨论》

    “周三分享”是盛派网络约定的每周三晚上定时举办的内部分享活动,活动主要由技术人员分享各方面的技术主题,并由所有参与者围绕主题进行讨论.除技术话题外,也可能涉及到相关的设计.财税.金融.政策等方面的延伸 ...

  9. Python 爬虫利器 Selenium

    前面几节,我们学习了用 requests 构造页面请求来爬取静态网页中的信息以及通过 requests 构造 Ajax 请求直接获取返回的 JSON 信息. 还记得前几节,我们在构造请求时会给请求加上 ...

  10. CS20SI-tensorflow for research笔记: Lecture2

    本文整理自知乎专栏深度炼丹,转载请征求原作者同意. 本文的全部代码都在原作者GitHub仓库github CS20SI是Stanford大学开设的基于Tensorflow的深度学习研究课程. Tens ...