面向切面编程(Aspect-Oriented Programming-AOP)以另一种对程序结构的思考方式对面向对象做了补充。AOP中模块化的核心单元为切面(Aspect),Aspect使程序的关注点(事物,日志,认证,消息发送…)模块化。
基本概念
- 切面 (Aspect)
横切多个方面(类,对象)的关注点模块 - 连接点(Join point)
程序执行过程的某一点(异常处理,方法执行…) - 增强(Advice)
切面在特定的连接点采取的动作,分为before, after, aroud几个类别 - 切点(Pointcut)
对连接点匹配的描述,与Pointcut表达式关联的Advice将在Pointcut匹配的Join point处被执行,Pointcut匹配Join point是AOP的核心概念 - 引入(Introduction)
为类声明额外的方法或者域 - 目标对象(Target object)
被切面增强的原始对象 - AOP代理(AOP proxy)
为了实现切面的增强功能而创建的代理对象 - 编织(Weaving)
链接切面与其他类,对象以能够生成增强对象的过程
切点匹配连接点作为AOP的核心概念,使AOP不同于一般的拦截技术,AOP通过Advice可以实现跨对象继承体系的Join point功能增强。
Advice分类
- 前置增强(Before advice)
在连接点之前被执行的动作,除非抛异常,否则不能打断连接点的执行 - 后置返回增强(After returning advice)
在连接点正常执行返回后执行的动作 - 后置异常增强(After throwing advice)
在连接点抛出异常返回后执行的动作 - 后置增强(After advice)
连接点返回后执行的动作,不管是正常返回还是异常返回 - 环绕增强(Around advice)
围绕着连接点的动作,环绕增强可以在连接点之前,之后执行,可以选择是否短路连接点,直接返回或抛出异常
Around advice的功能最强,选择Advice时,在满足需求的前提下,最好选择功能最简单的以提高简洁性和容错性。