AOP基本概念(在不惊动原始设计的基础上为其进行功能增强)
- 连接点(JoinPoint):程序执行过程中的任意位置,粒度为执行方法、抛出异常、设置变量等
- 在SpringAOP中,理解为方法的执行
- 切入点(Pointcut):匹配连接点的式子
- 在SpringAOP中,一个切入点可以只描述一个具体方法,也可以匹配多个方法
- 通知 (Advice):在切入点处执行的操作,也就是共性功能
- 在SpringAOP中,功能最终以方法的形式呈现
- 通知类:定义通知的类
- 切面(Aspect):描述通知与切入点的对应关系
AOP的入门案例
-
导包
-
创建一个切面类
-
定义切入点
-
在配置类中加载该切面
AOP的工作流程
- Spring容器启动
- 读取所有切面配置中的切入点
- 初始化bean,判定bean对应的类中的方法是否匹配到任意切入点
- 匹配失败,创建对象
- 匹配成功,创建原始对象(目标对象)的代理对象
- 获取bean执行方法
- 获取bean,调用方法并执行,完成操作
- 获取的bean是代理对象时,根据对象的运行模式运行原始方法与增强内容,完成操作
AOP切入点表达式
- 切入点表达式标准格式:动作关键字(访问修饰符 返回值 包名.类/接口名.方法名(参数)异常名)
- 动作关键字:描述切入点的行为动作,例如execution表示执行到指定切入点
- 访问修饰符:public,private等可以省略
- 异常名:方法中抛出指定异常,可以省略
- 可以使用通配符描述切入点,快速描述
- *:单个独立的任意符号,可以独立出现,也可以作为前缀或者后缀的匹配符出现
- …:多个连续的任意符号,可以独立出现,常用于简化包名与参数的书写
- +:专用于匹配子类类型
- 书写技巧
- *:单个独立的任意符号,可以独立出现,也可以作为前缀或者后缀的匹配符出现
AOP的通知类型
- @Before:设置当前通知方法与切入点之间的绑定关系,当前通知方法在原始切入点方法前运行
- @After:当前通知方法在原始切入点方法后运行
- @Around(重点,常用):当前通知方法在原始切入点方法前后运行
- @Around注意事项
AOP通知获取数据![在这里插入图片描述](https://img-blog.csdnimg.cn/99dfaed9a25b438cbf8469e273256888.png#pic_center)
Spring事务
- 在业务层接口上添加spring事务管理
- 设置事务管理器
- 开启注解式事务驱动