天天看点

AOP面向切编程及在Spring中的使用方法

AOP(Aspect-Oriented Programming, 面向切面编程): 是一种新的方法论, 是对传统的 OOP(Object-Oriented Programming, 面向对象编程)的补充

AOP 的主要编程对象是切面(aspect)

在应用 AOP 编程时, 仍然需要定义公共功能, 但可以明确的定义这个功能在哪里, 以什么方式应用, 并且不必修改受影响的类

AOP 的好处:

每个事物逻辑位于一个位置, 代码不分散, 便于维护和升级

业务模块更简洁, 只包含核心业务代码

单纯的术语也许不能让你清楚的明白 AOP,那么接下来我会通过一个实例来更加清晰的描述:

假设我们现在来实现一个计算器,我们可以很容易的写出:

这样简单的代码就实现了一个基础的计算器

但是,重点来了!如果现在客户提出了新要求:要求输出计算日志(log),就像这样:

AOP面向切编程及在Spring中的使用方法

为此,我们可能需要这样为每一个方法都加上输出日志的内容:

这样做无疑使得我们会写很多重复冗余的代码,极大的降低了效率而且非常不利于维护

像这样多出来的重复性的无关功能逻辑的代码,我们就称其为切面(Aspect)

面向切面编程(AOP)需要解决的问题就是:将切面独立出来

AOP面向切编程及在Spring中的使用方法

切面(Aspect): 横切关注点(跨越应用程序多个模块的功能)被模块化的特殊对象

通知(Adive): 切面必须要完成的工作

目标(Target): 被通知的对象

代理(Proxy): 向目标对象应用通知之后创建的对象

连接点(Joinpoint): 程序执行的某个特定位置

切点(Cutpoint): 每个类都拥有多个连接点, AOP 通过切点定位到特定的连接点. 类比: 连接点相当于数据库中的记录, 切点相当于查询条件

@Before 前置通知

@After 后置通知

@AfterReturning 返回通知

@AfterThrowing 异常通知

@Around 环绕通知