[笔记]Spring-Day3 — AOP
AOP核心概念
(Aspect Oriented Programming)面向切面编程,在不改原有代码的前提下对其进行增强 — 代理模式
代理(Proxy):SpringAOP的核心本质是采用代理模式实现的
连接点(JoinPoint):在SpringAOP中,理解为任意方法的执行
切入点(Pointcut):匹配连接点的式子,也是具有共性功能的方法描述
通知(Advice):若干个方法的共性功能,在切入点处执行,最终体现为一个方法
切面(Aspect):描述通知与切入点的对应关系
目标对象(Target):被代理的原始对象成为目标对象
通知类:定义通知的类
入门案例
环境准备
创建项目
添加spring依赖
添加Dao&DaoImpl类
spring的配置类
编写app运行类
新增依赖
定义通知类和通知 —> 定义切入点 —> 制作切面 —> 将通知类配给容器并标识其为切面类
开启注解格式AOP功能
运行程序
AOP工作流程
(好像不重要)
Spring容器启动
加载bean
需要被增强的类,如:BookServiceImpl
通知类,如:MyAdvice
读取所有切面配置中的切入点
初始化bean
获取bean执行方法
AOP配置管理
切入点表达式
*:单个独立的任意符号,可以独立出现,也可以作为前缀或者后缀的匹配符出现
..:多个连续的任意符号,可以独立出现,常用于简化包名与参数的书写
书写技巧 1. 按标准规范开发 2. 查询操作的返回值建议使用匹配 3. 减少使用..的形式描述包 4. 对接口进行描述,使用表示模块名,例如UserService的匹配描述为Service 5. 方法名书写保留动词,例如get,使用表示名词,例如getById匹配描述为getBy* 6. 参数根据实际情况灵活调整
AOP通知类型
前置通知
后置通知
环绕通知(重点)
环绕通知依赖形参ProceedingJoinPoint才能实现对原始方法的调用
环绕通知可以隔离原始方法的调用执行
环绕通知返回值设置为Object类型
环绕通知中可以对原始方法调用过程中出现的异常进行处理
返回后通知(了解)
@AfterReturning("pt2()")抛出异常后通知(了解)
@AfterThrowing
image-20230608112904274
业务层接口执行效率
AOP通知获取数据
AOP事务管理
在数据层或业务层保障一系列的数据库操作同成功同失败
转账案例-需求分析
环境搭建
准备数据库
创建项目导入jar包
根据表创建模型类
创建Dao接口
创建Service接口和实现类
添加jdbc.properties文件
创建JdbcConfig配置类
创建MybatisConfig配置类
创建SpringConfig配置类
编写测试类

最终项目结构如上
实现事务管理具体步骤
需要被事务管理的方法上添加注解@Transactional
@Transactional在JdbcConfig类中配置事务管理器
在SpringConfig的配置类中开启事务注解 @EnableTransactionManagement
@EnableTransactionManagement运行测试类
事务配置
@Transactional参数

转账业务追加日志
创建日志表
添加LogDao接口
添加LogService接口与实现类
在转账的业务中添加记录日志
事务传播行为
事务协调员对事务管理员所携带事务的处理态度
转账失败后,所有的事务都回滚,导致日志没有记录下来 — 让log方法单独是一个事务
修改logService改变事务的传播行为
最后更新于