01-事务管理-事务回顾-spring事务管理
事务回顾


概念
事务是一组操作的集合,是一个不可分割的工作大伟,所有操作要么同时成功,要么同时失败。
操作
- 开启事务(一组操作开始之前,要先开启事务):start transaction / begin;
- 提交事务(这组操作全部成功后,提交事务):commit;
- 回滚事务(中间任何一个操作出现异常,回滚事务):rollback;
spring事务管理

- @Transactional在方法上:方法执行前开启事务,方法结束后提交事务。若有异常,自动回滚。
- @Transactional在类上:类中所有的方法都交给spring管理。
- @Transactional在接口上:接口中所有的实现类中的所有方法都交给spring管理。
事务管理日志
需要在配置文件application.yml中添加一下的配置,用来开启事务管理日志

案例

启动服务,在浏览器尝试删除部门,抛出了异常,并且有事务回滚rollback

部门的数据依然需在。
02-事务管理-事务进阶-rollbackFor属性

自己定义了异常,启动服务器,删除教研部,虽然删除了部门,但是员工依然存在





因为我们抛出的不是RuntimeException,所以事务没有回滚。而之前的int i=1/0是算数异常继承,它继承了RuntimeException,所以才能回滚。
因此我们要配置@Transactioal注解,指定所有的异常都要回滚。
tips:双击shift键能快速搜索查看源码。
03-事务管理-事务进阶-propagation属性

关于事务a和事务b,到底是把b加入到事务a中,还是新建一个事务。这个时候我们就要用到propagation来设置传播行为,我们着重关注REQUIRED,REQUIRES_NEW。每个属性值及含义如下图所示。

适用场景

04-AOP基础-快速入门

简单来说就是提供一个模版方法,例如以上截图中的,获取开始时间,运行原始方法,获取结束时间。

在AOP类上要加上@Component,交给spring的IOC容器代理;@Aspect注解,标识这是一个AOP类。在类中编写模板方法。
@Around注解表示的是包括哪些特定方法。
不难看出,里面包含了“包名”,即“com.itheima.service”,如果需求变更是需要修改这个表达式。
关于包名后面的两个 *
第一个 * 表示“该包下所有的类或者接口”。
第二个 * 表示“类或接口中所有的方法”。
关于两个 .. ,意思是所有参数,
05-AOP基础-核心概念

在切点表达式中指定选择哪个连接点,意思是这个共性功能应用到具体的方法中。
例如,com.itheima.service.impl.DeptServiceImpl.list(),就是recordTime只用在指定的list()方法中。
06-AOP进阶-通知类型
通知类型如下图。重点掌握@Aroud


@PointCut注解提取公共切点表达式,降低冗余度,根据需求修改权限。

07-AOP进阶-通知顺序
通知顺序如下图。

08-AOP进阶-切入点表达式-@execution
常见的两种切入点表达式。

切点表达式-execution。
注意:包名.类名,一般不省略,提高效率。

使用通配符描述切入点。

09-AOP进阶-切入点表达式@annotation

在对应的方法上加上注解就行。


10-AOP进阶-连接点
@Around类型用ProceedingJointPoint
其他四种类型用JointPoint

其他四种。

11-AOP案例-记录日志操作


1061

被折叠的 条评论
为什么被折叠?



