黑马程序员JavaWeb(2023年版)学习笔记Part4

如果在阅读的时候有不足的地方,欢迎各位指出

本部分包含事务管理AOP

事务管理

事务: 一组操作的集合,这组操作要么全部成功,要么全部失败。

操作:

​ 开启事务:start transcation / begin

​ 提交事务:commit

​ 回滚事务:rollback

Spring事务管理

在Spring中开启事务管理只需要添加注解@Transactional

开启事务管理日志:

logging:
 level:
 	org.springframework.jdbc.support.jdbcTransactionManager:debug

事务回滚

rollbackFor :

​ 默认情况下只添加@Transactional注解,只有出现RunTimeException 才会回滚。rollbackFor属性可以控制出现哪种异常回滚事务。

事务传播

propagtion:

掌握两个:

  1. REQUIRED: 知道默认情况下事务是怎么处理的。

  2. REQUIRES_NEW: 当我们希望事务之间互不影响的时候可以使用该传播行为,例如,下订单前需要记录日志,无论失败和成功都要insert。

AOP

基础

AOP: 面向切面编程。要对业务功能中的增删改查添加统一的功能,使用AOP最为方便。

快速入门:

使用场景以及优缺点:

使用场景:

事务管理底层是使用AOP进行实现的,在方法开始的时候开启事务,在方法结束的时候提交事务。

​ 权限控制,日志记录。

优点:

​ 无代码入侵,你可以在不修改原先代码的逻辑上,为该代码增加功能。减少重复代码,易于维护等。

核心概念:

执行流程:

SpringAOP在底层使用动态代理,将目标对象的方法进行增强=》 复制原对象的代码,并根据AOP中的代码进行增加。

通知类型 

切入点表达式的小优化:

//原先形式:
@Before("execution(* com.itheima.service.impl.DeptServiceImpl.*(..))")
public void before()
{
    log.info("before....")
}

//将切入点整合(声明一个函数)
@PointCut("execution(* com.itheima.service.impl.DeptServiceImpl.*(..))")
public void pt(){}

@Before("pt()")
public void before()
{
    log.info("before....")
}

通知顺序

不同的切面类的执行顺序默认以类名先后执行。当然也可以添加@Order注解来设置(Filter(过滤器)也可以通过@Order组件进行设置)。

切点表达式

如果你要写两个毫不相关的方法的切点表达式,你可以试试这样

@Pointcut("execution(* com.itheima.service.DepServceImpl.delete().(..)) || execution(* com.itheima.service.DeptServiceImpl.list()) ")
private void pt(){}

切入点表达式的通配符:

 @annoation

//@annoation注解,用于匹配标识有注定注解的方法
@Before("@annoation(com.itheima.anno.Log)")
public void before()
{
	log.info("before...);
}

连接点

值得一提的是:如果你通过 Object result = joinPoint.proceed(); 来获得方法的返回值,那么你该切面就要返回return result。否则在目标方法中无返回值。

通过连接点可以来获得目标的属性等值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值