AOP即Aspect oriented Programing, 面向切面编程。

相关术语:

通知(Advice):

Advice defineds when to execute what action.
通知定义了切面要执行的内容以及在什么时候执行该内容。

Spring支持的5种通知类型:

  • Before - org.springframework.aop.MethodBeforeAdvice
  • After-returning - org.springframework.aop.AfterRetruningAdvice
  • After-throwing - org.springframework.aop.ThrowsAdvice
  • Arount - org.aopaliance.intercept.MethodInterceptor
  • Introduction - org.springframework.aop.IntroductionInterceptor

连接点(JoinPoint):

The time to execute advice.
连接点指明了应用通知的时机,比如方法执行时,异常抛出时等。

切入点(PointCut):

Where to execute the action.
定义了在什么地方去执行织入的操作, 比如某个类名或者方法名。可以使用正则表达式表示。

切面(Aspect):

The advice and pointcut makes up the aspect to specify where and when to execute the action.
通知和切入点共同组成了切面,即为动作要执行的时间,内容和地点。

引入(Introduction):

Allows us to add new methods or properties to a class.
引入允许向现有的类添加新的方法和属性(Spring引入类方法注入的功能)

目标(Target):

The target got adviced. If there's no AOP, the target need to execute other kind of logics like recording log, transaction controlle, and with AOP, it can focus on its own business logic.
被通知的对象。不使用AOP的时候,目标的逻辑需要交叉其它的诸如日志记录,事务控制等事务逻辑,使用AOP的时候,则只需要关注自己的业务逻辑就可以了。

代理(Proxy):

The object to apply advice.
应用通知的对象。

织入(Weaving):

Apply the aspect to the target to generate the proxy.
把切面应用到目标对象来创建代理对象的过程,织入一般发生在如下几个时机:

  • 编译时: 当一个类文件被编译时织入,需要特殊的编译器才能实现,比如AspectJ的编译器
  • 类加载时: 当使用特殊的类加载器在目标被加载到虚拟机之前增强类的字节代码
  • 运行时: 切面在运行的某个时刻被织入,SpringAOP就是以此种方式织入的,原理是是用了JDK的动态代理技术。

实现方式

  1. 基于代理
  2. 通过@AspectJ注解驱动
  3. 纯POJO切面
  4. 注入式AspectJ切面

AOP 总结的更多相关文章

  1. 基于spring注解AOP的异常处理

    一.前言 项目刚刚开发的时候,并没有做好充足的准备.开发到一定程度的时候才会想到还有一些问题没有解决.就比如今天我要说的一个问题:异常的处理.写程序的时候一般都会通过try...catch...fin ...

  2. Spring基于AOP的事务管理

                                  Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...

  3. 学习AOP之透过Spring的Ioc理解Advisor

    花了几天时间来学习Spring,突然明白一个问题,就是看书不能让人理解Spring,一方面要结合使用场景,另一方面要阅读源代码,这种方式理解起来事半功倍.那看书有什么用呢?主要还是扩展视野,毕竟书是别 ...

  4. 学习AOP之深入一点Spring Aop

    上一篇<学习AOP之认识一下SpringAOP>中大体的了解了代理.动态代理及SpringAop的知识.因为写的篇幅长了点所以还是再写一篇吧.接下来开始深入一点Spring aop的一些实 ...

  5. 学习AOP之认识一下Spring AOP

    心碎之事 要说知道AOP这个词倒是很久很久以前了,但是直到今天我也不敢说非常的理解它,其中的各种概念即抽象又太拗口. 在几次面试中都被问及AOP,但是真的没有答上来,或者都在面上,这给面试官的感觉就是 ...

  6. .Net中的AOP系列之构建一个汽车租赁应用

    返回<.Net中的AOP>系列学习总目录 本篇目录 开始一个新项目 没有AOP的生活 变更的代价 使用AOP重构 本系列的源码本人已托管于Coding上:点击查看. 本系列的实验环境:VS ...

  7. .NET里简易实现AOP

    .NET里简易实现AOP 前言 在MVC的过滤器章节中对于过滤器的使用就是AOP的一个实现了吧,时常在工作学习中遇到AOP对于它的运用可以说是很熟练了,就是没想过如果自己来实现的话是怎么实现的,性子比 ...

  8. 在.Net中实现自己的简易AOP

    RealProxy基本代理类 RealProxy类提供代理的基本功能.这个类中有一个GetTransparentProxy方法,此方法返回当前代理实例的透明代理.这是我们AOP实现的主要依赖. 新建一 ...

  9. 使用Java原生代理实现AOP

    ### 本文由博主柒.原创,转载请注明出处 ### 完整源码下载地址 [https://github.com/MatrixSeven/JavaAOP](https://github.com/Matri ...

  10. 【开源】.Net Aop(静态织入)框架 BSF.Aop

    BSF.Aop .Net 免费开源,静态Aop织入(直接修改IL中间语言)框架,类似PostSharp(收费): 实现前后Aop切面和INotifyPropertyChanged注入方式. 开源地址: ...

随机推荐

  1. vue select框change事件

    vue Select 中< :label-in-value="true" @on-change="satusSelect"> satusSelect ...

  2. h5-transform二维变换

    1.html <div class="translate">1</div> <div class="scale">2< ...

  3. “帮你”校园资讯平台app使用体验

    该app由我的17级学长学姐编写而成,主要功能失物招领,二手市场,表白墙.该软件目前只是面向本校的各专业学生,为内测版本.该软件的注册流程简单,只需要学号确定身份后即可登陆,并且发布各种信息,或者与丢 ...

  4. python期末考试复习

    期末考试复习 补修的python跟着大一一起学,考试肯定不会出难,于是就敲了一些代码,把他们放到博客上,来记录一下 代码都是一段一段的,且python代码不是很多,所以我都写到了一个文件里,作为练习 ...

  5. leetcode算法题121-123 --78 --python版本

    给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序. 实例输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明: 必须在原数组上操作,不能 ...

  6. JavaScript—面向对象贪吃蛇_1

    前面说了.面向对象的思考方式和面向过程的思考方式有着本质的区别. 贪吃蛇.作为各大培训机构.面向对象的练手项目,的确好.我昨天看完视频,有一种领悟面向对象的感觉,当然可能只针对贪吃蛇..要想在实际开发 ...

  7. matlab初级

    命令 ======== 系统命令 命令 功能 例 date 显示当前日期 ans = 20-Jul-2019 what 当前文件夹下的matlab文件   type 文件中的内容 type CV.m ...

  8. 基础练习--huffman

    问题描述 Huffman树在编码中有着广泛的应用.在这里,我们只关心Huffman树的构造过程. 给出一列数{pi}={p0, p1, …, pn-},用这列数构造Huffman树的过程如下: . 找 ...

  9. JAVA中如何判断一个输入是数字(小数和整数)还是字符串?

    public class Test1 {     public static void main(String[] args) {         Scanner input = new Scanne ...

  10. TF利用分布式队列控制线程

    假设分布式任务包含n个ps节点, m个worker节点. m, n>0. 希望所有worker的任务结束后,所有节点才终止. 方法: 借助队列tf.FIFOQueue实现. 原理: tf.FIF ...