第一章:面向切面编程-AOP概念和相关术语
“我们聚焦的永远是我们的目标,我需要喝水,水就是我们的目标,而水的质量好坏不应该让我喝水这件事情变得复杂,它应该由相关的机构去完成,在我喝水之前”
1、前言
检测水能否可以饮用是一个很重要的环节,但是并不是我应该重点关注的问题,假如每一次我需要购买水喝,都先拿着水去检测一遍,是不是让我们本来要做的事情变得很复杂呢?而且仔细想一下,检测水质量这件事,是不是可以批量呢?假如有个相关机构在将水售卖前批量去质检,是不是比我们每个人拿着水去相关单位检查更有效率呢?
我们项目也有很多业务也和上面一样的情况,比方安全、事务、日志等等,这些不是主线的事情与并不应该让我们本来要做的事情变得复杂。
所以我们相关机构切入到我们的行动中的这种思想就是面向切面的思想。
2、Aop术语
引用Spring实战第四版的图片
和大多数技术一样,Aop已经形成了自己的术语:
通知(advice):切面也有目标,在Aop中,切面的工作被称为通知。通知定义了切面是什么、什么时候使用。除了形容要完成什么工作,还形容了什么时候去完成。
Spring切面可以应用5中类型的通知:
? —— 前置通知(Before): 在目标方法被调用之前调用通知功能
? ——后置通知(After):在目标方法完成之后调用通知,此时不会关心方法的输出是什么
? ——返回通知(After-returning):在目标方法成功执行之后通知
? ——异常通知(After-throwing):在目标方法抛出异常后调用通知
? ——环绕通知(Around):通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自己设置的行为
例如:@Before(“”)? 这个就是前置通知,before定义了时间,被注解的方法定义了通知的内容
注:aop的实现是基于代理商模式去实现的,可以在目标方法的之前、之后、执行操作中抛出异常等节点加入逻辑
连接点(Join point):连接点是应用执行过程中能够插入切面的一个点,这个点可以是调用方法时、抛出异常时、甚至于修改字段时。这种时机有很多,切面代码可以利用这些切入点插入到应用的正常流程中,并增加新的行为。
切点(Poincut): 假如说通知定义了切面是“什么”(what)、“何时”(when),那么切点就定义了“何处”(where),我们通常使用明确的类和方法名或者是利用正则表达式定义所匹配的类和方法名来指定这些切点。有些Aop框架允许我们创立动态的切点,可以根据运行时的决策来决定能否应用通知
例如:execution(* com.study.pany.bean.aop.Performance.perform(..)? 这个就是切点
切面(Aspect):切面是通知和切点的结合,通知和切点共同定义了切面的一律内容(what、when、where)
例如: Audience? 就是切面,被@Aspect修饰
@Component
@Aspect
public class Audience {
? ? ? ? @Before(“execution(* com.study.pany.bean.aop.Performance.perform(..))”)
? ? ? ? public void silenceCellPhones(){
? ? ? ? ? ? ? ? ? System.out.println(“Silencing cell phones”);
? ? ? ? }
}
引入(Instroduction):引入它允许我们向现有类增加新方法和属性,可以在不修改现有类的基础上,让现有类具备新的行为和状态
织入(weaving):织入是把切面应用到目标对象并创立新的代理商的过程,切面在指定的连接点被织入到目标对象中。在目标对象的生命周期中有多个连接点可以进行织入:
? ? ? ? ? ? ? 编译期:切面在目标类编译时被织入,依赖特殊的编译器
? ? ? ? ? ? ? 类加载期:切面在目标类加载到JVM时被织入,依赖类加载器
? ? ? ? ? ? ? 运行期:切面在应用运行的某个时刻被织入
3、Spring使用AspectJ注解来公告通知方法(扩充)
@After?? 通知方法会在目标方法返回或者抛出异常后调用,相当于@AfterReturning? + @AfterThrowing
@AfterReturning? 通知方法会在目标方法返回之后调用
@AfterThrowing 通知方法会在目标方法抛出异常后调用
@Before 通知方法会在目标方法执行之前调用
@Around? 通知方法会将目标方法封装起来
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 第一章:面向切面编程-AOP概念和相关术语