Spring学习笔记2
使用注解实现事务(声明式事务)
目标:通过事务 使以下方法 要么全成功、要么全失败
-
jar包
spring-tx
-4.3.9.RELEASE 事务
ojdbc.jar
commons-dbcp.jar 连接池使用到数据源
commons-pool.jar 连接池
spring-jdbc-4.3.9.RELEASE.jar
aopalliance.jar -
配置
jdbc\mybatis\spring
增加事务tx的命名空间
<!-- 增加对事务的支持 -->
<tx:annotation-driven transaction-manager="txManager" />
- 使用
将需要 成为事务的方法 前增加注解:
@Transactional(readOnly=false,propagation=Propagation.REQUIRED)
AOP:面向方面编程
一个普通的类 变成 有特定功能的类
a.继承类 b.实现接口 c.注解 d.配置
public class MyFilter exntends/implements Xx
{
}
类 变成 “通知” :实现接口
前置通知实现步骤:
-
jar
aopaliance.jar
aspectjweaver.jar -
配置
-
编写
aop:每当之前add()之前 自动执行一个方法log();
addStudent(); 业务方法(IStudentService.java中的 addStudent())
before(); 自动执行的通知,即aop前置通知
public class Xxx
{
@Test
a(){}
}
如果出现异常:类似java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool
则说明缺少jar
后置通知:
- 通知类 ,普通实现接口
- 业务类、业务方法
StudentServiceImpl中的addStudent() - 配置:
将业务类、通知 纳入springIOC容器
定义切入点(一端)、定义通知类(另一端),通过pointcut-ref将两端连接起来
异常通知:
根据异常通知接口的定义可以发现,异常通知的实现类 必须编写以下方法:
public void afterThrowing([Method, args, target], ThrowableSubclass)
public void afterThrowing(Method, args, target, ThrowableSubclass)
public void afterThrowing( ThrowableSubclass)
环绕通知: 在目标方法的前后、异常发生时、最终等各个地方都可以 进行的通知,最强大的一个通知;
可以获取目标方法的 全部控制权(目标方法是否执行、执行之前、执行之后、参数、返回值等)
- 在使用环绕通知时,目标方法的一切信息 都可以通过
invocation
参数获取到 - 环绕通知 底层是通过拦截器实现的。
实现注解实现 通知 ,aop
-
jar
与 实现接口 的方式相同 -
配置
将业务类、通知 纳入springIOC容器
开启注解对AOP的支持<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
业务类 addStudent - 通知 -
编写
通知:
@Aspect //声明该类 是一个 通知
public class LogBeforeAnnotation {
}
注意:通过注解形式 将对象增加到 ioc容器时,需要设置 扫描器
<context:component-scan base-package="org.lanqiao.aop"></context:component-scan>
-
扫描器 会将 指定的包 中的
@Componet
@Service
@Respository
@Controller
修饰的类产生的对象 增加到IOC容器中
@Aspect
不需要 加入扫描器,只需要开启即可:<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
-
通过注解形式 实现的aop,如果想获取 目标对象的一些参数,则需要使用一个对象:
JointPoint
注解形式的返回值:
- 声明返回值 的参数名:
@AfterReturning( pointcut= "execution(public * addStudent(..))" ,returning="returningValue" )
public void myAfter(JoinPoint jp,Object returningValue) {//returningValue是返回值,但需要告诉spring
System.out.println("返回值:"+returningValue );
-
注解形式实现aop时,通知的方法的参数不能多、少
-
实现接口形式、注解形式 只捕获声明的特定类型的异常,而其他类型异常不捕获。
cath()
通过 配置将 类变通知
基于Schema
配置
类似 与 实现接口的方式
- 接口方式通知:public class LogAfter implements AfterReturningAdvice
- Schema方式通知:
a.编写一个普通类public class LogAfter {}
b.将该类 通过配置,转为一个“通知”
如果要获取目标对象信息:
注解、schema:JoinPoint
接口:Method method, Object[] args, Object target
- schema形式 和注解形式相似,不同之处: 注解形式 使用了注册@After, schmema形式进行了多余的配置
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?