面向切面编程(AOP)中的术语你能说出几个?
AOP应用非常广泛,它主要用于具有横切逻辑的场景当中,比如事务管理、访问控制、性能监测、日志记录和缓存等等。AOP将这些横切逻辑和主业务逻辑分离出来抽离为单独的模块,然后再通过切点加以执行从而达到简化代码、降低业务复杂度的效果。但是大家应该知道AOP是一个独立的研究领域,有其独立的术语进行描述,当提到AOP时java开发人员可能会将它等同于SpringAOP,其实不然。
AOP是一种编程思想,其有多种实现,SpringAOP也只是其中的一种实现,另外还有AspectJ。SpringAOP对AspectJ进行了部分支持来作为自己的扩充。
今天这篇文章主要介绍AOP的核心概念和相关术语。因为如果你不了解aop的专业名词的话相信你会很难透彻地理解这个领域。下面我们就来一起看一下吧。
通知-Advice
通知定义了切面是什么以及何时使用,即what和when。Spring中的通知有以下5中。
前置通知(before):在目标方法执行之前执行的通知
后置通知(after):在目标方法执行之后执行的通知,此时不关心方法是否成功执行
返回通知(after-returning):在目标方法成功执行之后执行的通知
异常通知(after-throwing):在目标方法抛出异常之后执行的通知
环绕通知(around):通知包含了目标方法,可以在目标方法执行之前和执行之后执行自定义的行为。
连接点-Join point
连接点是在应用执行过程中可以插入切面的一个点,即where can,是一个集合。
切点-Pointcut
切点是匹配了的一个或多个连接点。定义了切面在何处执行,即where。切点的前提也是一个连接点哦,它是连接点的一个子集。
切面-Aspect
切面是通知advice和切点pointcut的结合,是一个复合术语。通知和切点共同定义了切面的全部内容:它是什么,在何时何处完成其功能。
引入-Introduction
引入允许向现有的类添加新方法或属性。用于扩展类的功能。这个相信很多小伙伴都没应用过吧,不过这确实也是aop里的一种功能。
织入-Weaving
织入就是把切面应用到目标对象并创建新的代理对象的过程。切面在指定的连接点被织入到目标对象中。在目标对象的生命周期里有多个点可以织入:
编译期:这种是一种静态的织入,需要特殊的编译器,比如AspectJ。
类加载期:切面在目标类加载到JVM时被织入。这种需要特殊的类加载器来增强目标类的字节码。AspectJ5的LTM(load-time weaving)就支持这种方式。
运行期:切面在应用运行的某个时刻被织入。一般情况下AOP容器会为目标对象动态地创建一个代理对象。SpringAOP就是这种模式。
相信通过本篇文章大家对AOP的理解都能够达到一个新的高度。如果有什么疑问小伙伴们可以在评论区留言哦。