AOP【面向切面编程】
作用:在不惊动原始设计的基础上进行功能增强。
无侵入式编程
连接点
:程序执行的任意位置,SpringAOP中,理解为方法的执行。
切入点
:匹配连接点的式子,要追加功能的方法
通知
(写在通知类中):共性功能,在切入点执行的操作。
- SpringAOP中,最终以方法的形式呈现
通知类
:定义通知的类
切面
(Aspect):描述通知的共性功能和切入点的关系
步骤
代码实现步骤:
1、导入相关坐标
2、定义dao接口与实现类
3、定义通知类
4、@Pointcut注解定义切入点
5、@Before等注解绑定切入点与通知关系
6、@Component @Aspect告诉程序通知类用来AOP
7、@EnaleAspectJAutoProxy : 告诉程序注解开发AOP;开启功能
AOP工作流程
- Spring容器启动
- 读取所有切面配置中的切入点,只读取已经配置了(建立联系的)切入电
- 初始化bean,判断bean对应的类中的方法是否匹配到任意切点
匹配失败
,创建对象匹配成功
,创建目标对象的代理对象 (代理模式实现)- 获取bean执行方法
tips:AOP重写了toString
切入点表达式
- 可以使用通配符
AOP编码技巧
- 安装AOP标准规范开发
- 描述切入点
描述接口
- 返回值对于增删改使用精确类型加速匹配;查询类使用*通配快速匹配
- 包名书写避免…匹配,常用*做单个包描述匹配,或精确匹配
- 接口名/类名书写名称与模块相关的采用*匹配,eg.UserService书写成*Service,绑定业务层接口
- 方法名书写以动词进行精准匹配,名词采用匹配。eg. getById书写成getBy, selectAll书写成selectAll
- 不使用异常作为匹配规则
AOP通知类型
- 前置通知
- 后置通知
- 环绕通知
- 返回后通知
- 抛出异常后通知
环绕通知
@Around
有返回值情形
AOP通知获取数据
- 获取参数
- 获取返回值
- 获取异常
Spring事务
- 事务管理员:发起事务方,在Spring中,通常指代业务层开启事务的方法。
- 事务协调员:加入事务方,在Spring中,通常指代数据层方法,也可以是业务层方法。