---恢复内容开始---
在软件开发中,散布于应用中多处的功能成为横切关注点,常见的场景如日志,与业务逻辑分离,但是却直接嵌入业务逻辑。
以电力公司统计定量为例
AOP术语
通知advice
抄表员必须在家门口的电表上记录电量向电力公司报告,那么他们必须有一份住户清单,汇报信息,记录电量,其中记录电量才是他的主要工作,那么通常把它必须要完成的工作称为通知
通知定义了切面是什么以及何时使用,除了描述切面要完成的工作,通知还解决了何时执行的工作,如在某个方法被调用之前?之后?之前和之后?还是在异样时调用?
类型:
前置通知:before 在目标方法被调用之前通知
后置 After 在方法调用之后通知
返回 after-returning 在方法执行成功后通知
异常 after-throwing 在方法异常后通知
环绕 around 通知了被通知的方法,调用之前与之后的行为
连接点join point
一个区域可能有多个住户,可能还有多个区域,各种类型的电表,但是他们的目标是所安装的电表,可以理解这里的电表为通知的连接点。
切点pointcut
每个抄表员被分别指定到某一区域的住户,如果通知定义了切面的“什么”和“何时”,那么切点就定义了何处,切点定义了会匹配通知所有织入的一个或者多个连接点,
切面aspect
切面就是通知和切点的结合。 抄表员要具体到那个区域抄谁家的电表
引入
引入允许我们向现有的类增加新方法或者属性
织入
把切面应用到目标对象并创建新的代理对象的过程
Spring提供了4种类型的AOP支持
基于代理的经典Spring AOP;
纯POJO切面
@AspectJ注解驱动的切面
注入式AspectJ切面
面向切面主要引用于程序中的日志、安全和事务管理模块。
---恢复内容结束---