事物管理和AOP

事务管理

正常情况:

异常情况

事务管理

默认情况下:@Transactional只有出现运行时异常才能正常回滚事务

一般加在Service层上,而且方法中有多次数据库的增删改时加上此注释

@Transactional (rollbackFor = Exception.class) 出现所有异常都会回滚

propagation属性不添加时,默认为REQUIRED

事务同时只能存在一个,外层方法已经标记为一个事务,内部的方法,如果不进行特别的说明就会默认为同一个事务

这样内部的方法是一个独立的事务,即便外层的事务失败,内部的方法也会成功,就可以达到无论解散部门失败还是成功,都会记录日志的效果



AOP

用一句话总结AOP:将与核心业务无关的代码独立的抽取出来,形成一个独立的组件,然后以横向交叉的方式应用到业务流程当中的过程被称为AOP。

面向特定的方法编程,可以在不改动原始方法的基础上,针对于原始的方法进行编程,这个编程可以是原功能的增强,也可以是原始功能的改变,

面向切面编程仅仅是一种编程思想

动态代理技术是面向切面编程这种思想最主流的实现方式

SpringAOP的底层就是动态代理技术

@Aspect指定这个类不是普通的类,是一个AOP类

@Around指定把这个AOP方法加在 哪个包下的哪些方法 上

AOP应用场景:



这里object result = joinPoint.proceed () ;必须要有返回值,不然原始方法运行完,拿不到返回值

这里@Around("execution(* com.itheima.service.impl.*.*..)))"")

第一个 * 表示任意类型的返回值

第二个和第三个 * 表示任意类名、任意方法名

最后的 .. 表示任意的形参




重复形参过多,可以在类中提前定义好切入点表达式



包名.类名不建议省略

*  任意单个字符   或者  通配包名类名方法名的一部分

..  任意多个字符    或者  任意层级的包   或者任意任意、任意 个数的参数

注意:形参如果不采用通配符的话,要使用全类名


如何同时匹配两个完全不相关的切入点:使用 ||  连接



通过自定义注释,然后匹配有特定注解的方法

1.自定义一个注释

2.在特定方法上加上这个自定义注释

3.将切入点设置为 自定义注释


对于除了@Around以外的其它四种通知



要记录返回值和执行时长,所以要用@Around注释

由于增删改没有命名规律,所以用@Log自定义注释,再用@annotation引入切入点的方式比较简单

注意:也是难点

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

#学习的路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值