文章目录
SpringAOP简介:
与OOP对比:
面向对象编程OOP(Object Oriented Programming)语言提供了类与类之间纵向的关系(继承、接口),
而面向切面编程AOP(Aspect Oriented Programming)补充了横向的关系。
AOP提供了切面,切面对关注点进行模块化,例如横切多个类型和对象的事务管理(这些关注点术语通常称作横切(crosscutting)关注点)。
优点:
AOP提供了强大的中间件解决方案,这使得Spring IOC更加完善。
应用场景:
我们可以通过AOP来实现日志监听,事务管理,权限控制等等。
AOP术语:
切面(Aspect) :
我们将自己需要插入到目标业务逻辑中的代码模块化, 通过AOP使之可以横切多个类的模块,称之为切面。
在Spring AOP中,切面可以使用通过类(基于模式(XML)的风格)或者在普通类中以@Aspect注解(AspectJ风格)来实现。
在Spring AOP配置中切面通常包含三部分:
- 切面模块本身
- 通知
- 切入点
切入点 (Pointcut)
在 Spring AOP 中,需要使用 AspectJ 的切点表达式来定义切点。
连接点(Join point):
程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。在Spring AOP中一个连接点总是代表一个方法的执行。个人理解:AOP拦截到的方法就是一个连接点。通过声明一个org.aspectj.lang.JoinPoint类型参数我们可以在通知(Advice)中获得连接点的信息。这个在稍后会给出案例。
切入点(Pointcut):
匹配连接点(Join point)的断言。通知(Advice)跟切入点表达式关联,并在与切入点匹配的任何连接点上面运行。
切入点表达式如何跟连接点匹配是AOP的核心,Spring默认使用AspectJ作为切入点语法。
通过切入点的表达式来确定哪些方法要被AOP拦截,
AspectJ 指示器 | 描述 |
---|---|
execution () | 用于匹配连接点的执行方法 最常用 |
args () | 限制连接点的指定参数为指定类型的执行方法 |
@args () | 限制连接点匹配参数类型由指定注解标注的执行方法 |
this () | 限制连接点匹配 AOP 代理的 Bean 引用为指定类型的类 |
target () | 限制连接点匹配特定的执行对象,目标对象是指定的类型 |
@target () | 限制连接点匹配特定的执行对象,这些对象对应的类要具备指定类型注解 |
within() | 限制连接点匹配指定类型,比如哪个包下,或哪个类里面< |