AOP概念
- AOP:面向切面(方面)编程,扩展功能不修改源代码实现
- AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码,达到了高内聚低耦合的特性。
- AOP底层使用动态代理实现
- 第一种情况,有接口情况,使用动态代理创建接口实现类代理对象
- 第二种情况,没有接口情况,使用动态代理创建类的子类代理对象
AOP的理解
1、纵向抽取机制增强一个方法:
2、横向抽取机制增强一个方法:
---
AOP操作术语
- 连接点(Joinpoint):所谓链接点就是指哪些被拦截的点。在spring中,这些点指的是方法。(通俗理解:类里面可以增强的方法,这些方法并成为连接点)
- 切入点(pointcut):实际增强的方法,则为切入点。
- 通知/增强(Advice):增强的逻辑,成为增强,例如需要增加记录日志的操作,则记录日志的逻辑则称为增强。增强类型分为:前置通知、后置通知、异常通知、最终通知、环绕通知(在方法之前和之后执行)
- 切面(Aspect):把增强应用到具体方法上面,这个过程则成为切面。(把增强应用到切入点的过程)
Spring的AOP操作
1、在spring里面进行aop操作,使用的是aspectj实现(acpectj可以理解为是另一种框架)
2、使用aspectj实现aop有两种方式:xml、注解(不常用)。
-
操作准备
- 除了导入基本的jar包之外,还需要导入aop相关的jar包
2. 创建spring核心配置文件,导入aop的约束
3. 使用表达式配置切入点
execution(<访问修饰符>?<返回类型><方法名>(<参数>)<异常>)
(1)execution(* cn.itcast.aop.Book.add(..))
(2)execution(* cn.itcast.aop.Book.*(..))
(3)execution(* *.*(..))
(4) 匹配所有save开头的方法 execution(* save*(..))
4、配置
解释:Book类的方法需要增强,因此这里配置切入点pointcut1,就是代表Book类的方法,myBook配置的是切面,即里面要体现使用哪个类的方法的哪个方法增强哪个切入点,这里既是用MyBook的before1方法增强pointcut1这个切面。
基于aspectj的注解aop操作
1、在spring核心配置文件中,开启aop操作
2、在增强类上面使用注解完成aop操作。