博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringAOP
阅读量:6279 次
发布时间:2019-06-22

本文共 1946 字,大约阅读时间需要 6 分钟。

   武汉最近突然就变冷了,我也坐在冷冷的公司敲着代码,这让我非常怀恋在以前公司开着暖气coding的日子。现在公司为撒不开暖气呢?肯定是电费太贵,这样只能苦了我们。要是能少交电费就好了。想想我们平时是怎么叫电费的:抄表员或者电子记录表通过电表定时的记录我们每个月使用的电量,然后根据每°电的价格得出我们的电费。试想如果没有电表该怎么办呢?或许我们每个家庭可以自己估算自己的用电量,或者凭良心记录,这样交电费多好啊。(不过电力公司可能就破产了)想一想这个例子,家里只要有电器使用,电表就回走表,而且当你使用电器的时候似乎根本不知道电表的存在。此时的电表多么像一个通知(advice),而电器用电就是一个切点(cutpoint),而组合起来就是一个切面(aspect)了。

  其实面向切面就是这么的简单,它可能就在你的身边。那么现在就讲讲面向切面的基本术语:

  横切关注点:分布于应用中多处的功能;

  切面:横切关注点可以被模块化为特殊的类,这些类被称为切面;

  通知(advice):定义切面是什么以及何时使用;(5中类型)

          1.Before---在方法被调用之前调用通知;

          2.After-----在方法完成之后调用通知,无论方法是否执行成功;

          3.After-returning---在方法成功执行之后调用通知;

          4.After-throwing----在方法抛出异常后调用通知;

          5.Around----通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为;

  连接点(Joinpoint):在应用执行过程中能够插入切面的一个点。

  切点(Pointcut):通知起作用的连接点。

  切面(Aspect):切点和通知的结合。(通知定义了何时,做什么;切点定义了何处)

  引入(Introduction):引入允许我们向现有的类添加新方法或属性;

  织入(weaving):织入是将切面应用到目标对象来创建新的代理对象的过程。

          编译期:切面在目标类编译时织入。这种方法需要特殊的编译期。(AspectJ的织入编译期就是以这种方式织入切面的)

          类加载期:切面在目标类加载到JVM时被织入。这种方式需啊哟特殊的类加载器,它可以在目标类被引用之前增强目标类的字节码。

          运行期:切面在应用运行的某个时刻被织入。一般情况下,在织入切面时,AOP容器会为目标对象动态地创建一个代理对象。Spring AOP就是以这种方式织入切面的

 

Spring提供了4种各具特色的AOP支持:

  • 基于代理的经典AOP
  • @AspectJ注解驱动的切面
  • 纯POJO切面
  • 注入式AspectJ切面

  前三种都是spring基于代理的AOP变体,Spring对AOP的支持局限于方法拦截。如果AOP需求超过了简单方法拦截的范畴(比如构造器或属性拦截),那么应该考虑在AspectJ里实现切面,里哦用Spring的DI把Spring Bean注入到AspectJ切面中。

Spring在运行期通知对象,只支持方法连接点。

 

下面是一个简单的例子:

  

 

  Spring的AOP配置元素:

     顶层的AOP配置元素,大多数的
元素必须包含在
元素内
     定义切面
     定义前置通知
    定义后置通知
定义AOP after-returning通知
定义AOP after-throwing通知
定义AOP around通知
定义切点
定义AOP通知器
启用@AspectJ注解驱动的切面
为被通知的对象引入额外的接口,并透明地实现

 

  在定义切点时,Spring借助AspectJ的切点表达式语言来定义Spring切面。

 详细内容可参考:

  

 

 

  

转载于:https://www.cnblogs.com/gongdi/p/4953829.html

你可能感兴趣的文章
<三体> 给岁月以文明, 给时光以生命
查看>>
Android开发 - 掌握ConstraintLayout(九)分组(Group)
查看>>
springboot+logback日志异步数据库
查看>>
Typescript教程之函数
查看>>
Android 高效安全加载图片
查看>>
vue中数组变动不被监测问题
查看>>
3.31
查看>>
类对象定义 二
查看>>
收费视频网站Netflix:用户到底想要“点”什么?
查看>>
MacOS High Sierra 12 13系统转dmg格式
查看>>
关于再次查看已做的多选题状态逻辑问题
查看>>
动态下拉菜单,非hover
查看>>
政府安全资讯精选 2017年第十六期 工信部发布关于规范互联网信息服务使用域名的通知;俄罗斯拟建立备用DNS;Google打击安卓应用在未经同意情况下收集个人信...
查看>>
简单易懂的谈谈 javascript 中的继承
查看>>
多线程基础知识
查看>>
iOS汇编基础(四)指针和macho文件
查看>>
Laravel 技巧锦集
查看>>
Android 使用 ViewPager+RecyclerView+SmartRefreshLayout 实现顶部图片下拉视差效果
查看>>
Flutter之基础Widget
查看>>
写给0-3岁产品经理的12封信(第08篇)——产品运营能力
查看>>