概述
AOP(Aspect Oriented Programming)是一种切面编程思想。面向切面编程是将程序抽象成各个切面,将那些影响了多个类的公共行为抽取到一个可重用的模块里,减少系统的重复代码,降低模块之间的耦合度,增强代码的可操作性和可维护性。
AOP把软件系统分为两把部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理、增强处理。
AOP特性
通知(Advice):AOP框架中的增强处理。通知描述了切面何时执行以及如何执行增强处理。
连接点(Join point):连接点表示应用执行过程中能够插入切面的一个点,这个点可以是方法的调用、异常的抛出。在Spring AOP中,连接点总是方法的调用。
切点(PointCut):可以插入增强处理的连接点。
切面(Aspect):切面是通知和切点的结合
引入(Introduction):允许我们向现有的类添加新的方法或属性
织入(Weaving):将增强处理添加到目标对象中,并创建一个被增强的代理对象
Spring AOP
切点指示器
AspectJ指示器 | 描述 |
---|---|
arg() | 限制连接点匹配参数为指定类型的执行方法 |
@arg() | 限制连接点匹配参数由指定注解标注的执行方法 |
execution() | 用于匹配连接点的执行方法 |
this() | 限制连接点匹配AOP代理的Bean引用为指定类型的类 |
target() | 限制连接点匹配目标对象为指定类型的类 |
@target() | 限制连接点匹配特定的执行对象,这些队对象对应的类要具备指定类型的注解 |
within() | 限制连接点匹配指定的类型 |
@within | 限制连接点匹配指定注解所标注的类型 |
@annotation | 限制匹配带有指定注解的连接点 |
注意:只有execution是唯一的执行匹配,其他的指示器都是用于限制匹配的。
通知类型
通知类型 | 描述 |
---|---|
@Before | 通知方法会在目标调用前执行 |
@After | 通知方法会在目标方法返回或异常后调用 |
@AfterReturning | 通知方法会在目标方法返回后调用 |
@AfterThrowing | 通知方法会在目标方法抛出异常后调用 |
@Around | 通知方法会将目标方法封装起来 |
Spring AOP配置方法
注解方式
使用@PointCut注解声明切点表达式,然后使用表达式。
评论 (0)