AOP面向切面编程,是一种编程思想,并不是Spring专有,Spring是封装代理模式完成,之前的博客中也写到了关于AOP的文章,Filter和代理,请见《以此之长,补彼之短----AOP(Filter)》和《以此之长,补彼之短----AOP(代理模式)》。这篇主要介绍SpringAOP的几个概念和一般用法,不再具体细说每个名词的来源,从用法中读者应该就会体会到。下面用三峡大坝作为例子,通俗的来理解几个生涩的名词。

场景:为了合理利用长江丰富水资源,要在长江流域修建一个大坝,并且要在大坝上建立一个汛期报警系统,防止水位过高带来的安全隐患。

切入点(Pointcut):修大坝首先要定位在何地修建,三峡水流湍急,成为首选之地,在AOP中有个专业的名词叫切入点,这个例子中,三峡就是切入点。在程序中,切入点一般是一个或多个符合某种规则的方法,用正则表达式来表示,如:expression= "execution(* add*(..)),Pointcut是用来订阅连接点的。

有了修建的地址,接下来就要建造大坝了,那这个大坝就是Spring中所说的切面:

切面(Aspect):三峡大坝中拦水的“大坝”,可以把它想象成一个没有具体实现的框架。在程序中,切面是我们想要插入的模块,可以理解成一层,或者一个类,也可以是一个应用(类比较好理解)。切面是一个模块化的过程,善于发现合理的切面是我们在应用AOP最重要的一部分。

通知(Advice):有了大坝这个框架后(可以理解成一个类),就该实现他了,汛期报警系统是大坝配套设施的其中之一(可以理解成类中的一个方法)。Advice是横向关注点的具体实现者。该汛期报警系统由如下几种报警类型:

A.前置通知(Beforeadvice):在水位还未到达警戒线时汛期报警系统发出通知(执行方法)。调用目标对象方法之前执行。

B.后置通知(Afterreturning advice):水位已超过警戒线通知(执行方法)。调用目标对象方法之后执行。

C.异常通知(Afterthrowing advice):出现地震等异常情况时发出通知。目标对象方法出错后执行。

D.最终通知(After(finally)advice):发生异常情况,或水位到了警戒线,都会发出通知。目标对象方法出错或者执行完成后执行。

E.环绕通知(AroundAdvice):在水位未到达或已超过警戒线时都会发出通知。目标对象方法执行前和执行后都会执行通知。

连接点(Joinpoint):这个概念比较晦涩,它指的是方法调用,指符合切入点具体的方法调用称为连接点。比如在addUser()方法前添加事务管理(用AOP技术),那么把addUser()的调用称之为连接点。

目标对象(TargetObject):这里指长江。程序中是被通知对象。

织入(Weaving):大坝修在三峡的过程称之为织入,进一步看就是把Advice用到Joinpoint上。织入就是把切面连接到其它的应用程序类型或者对象上,并创建一个被通知的对象。

AOP代理(AOPProxy):在SpringAOP中有目标的概念,有些AOP是没有目标的,他会把代理这类采用一种编译器,把代理上所有的控制行为全部放到目标上,相当于采用编译器直接把要控制的东西全部编译到一个类里,就没有了目标的概念。Spring是有单独的概念的,在运行时来调用目标,这就是代理的功能。

引入(Introduction):动态的为某个类增加或减少方法。

本文原地址:

http://blog.csdn.net/bjyfb/article/details/8522849

以下是我自己看完之后的总结

切入点 代表什么时候调用切面的代理对象

通知  切面代理对象中的某个具体实现方法,来告诉系统什么时候该使用切面了   分前置 后置 环绕 异常 最终

连接点  调用使用“通知”也就是代理对象中的某个具体实现方法就是连接点

织入  就是将切面这个代理对象放在切入点处并且创建一个被通知的对象

最新文章

  1. CentOS 7.1编译安装PHP7
  2. h5 audio标签在手机上不能自动播放????
  3. PHPCMS后台密码忘记解决办法
  4. table首行固定
  5. PHP函数microtime()
  6. 树莓派版的家用NAS服务器
  7. dom4j创建xml
  8. CentOS6.4 配置DNS服务器
  9. 关于java -version版本问题
  10. 在地图上添加POI(二)
  11. C++ 类使用多线程技术
  12. sj 网页前端与后台数据交互的3种方式
  13. Oracle表空间迁移Move Tablespace
  14. UEditor的jQuery插件化 -转
  15. <转>七种测试驱动模式
  16. python之count()函数
  17. js中this的总结
  18. org/apache/maven/cli/MavenCli : Unsupported major.minor version 51.0
  19. LOJ#551 Matrix
  20. Linux DRM KMS 驱动简介【转】

热门文章

  1. vue的图片上传
  2. Ubuntu下sudo命令出现无法解析主机名
  3. ssh 提示Connection closed by * 的解决方案
  4. C++通过ADO读写Excel文件
  5. 设计模式之生成器(Builder)模式
  6. return false与return true的区别
  7. Python十题(第2课)
  8. PHP 设计模式阅读清单
  9. memcache图形化管理工具MemAdmin
  10. 如何修改HTML5 input placeholder 颜色