Spring学习(三 AOP注解开发和事务)

AOP注解开发(基于AspectJ)

将目标类交给Spring

将切面类交给Spring

在配置文件中打开AOP注解

在切面类上加上@Aspect            //将其注解为切面类

在切面类的方法上加上@Before    @AfterReturning    @Around    @After    @AfterThrowing    //通知类型

基本形式    @XXX ( value = " execution(语法) " )

通知类型详解

@Before    前置增强

@Before(value="execution( * xxx.xxx.example(..))")


@AfterReturning    后置增强

@AfterReturning(value="execution(*xxx.xxx.example(..))",returning="result")        切面方法中传入参数 (Object  result)


@Around    环绕增强

@Around(value="execution(*xxx.xxx.example(..))")

切面方法中传入参数    (ProceedingJoinPoint  joinPoint)

System.out.println("===前===");

Object object = joinPoint.proceed(); //执行切点的方法

System.out.println("===后===");

return object;


@AfterThrowing    异常抛出通知

@AfterThrowing(value="execution(*xxx.xxx.example(..))",throwing="ex")

可以在方法中传入参数 (Throwable ex)   获取到异常信息


@After    最终通知

@After(value="execution(*xxx.xxx.example(..))")



Spring事务管理

什么是事务?

事务指的是逻辑上一组操作,这组操作要么全部成功,要么全部失败.

事务特性

原子性   

这一组操作不可分割,一起发生,或一起都不发生

一致性

事务前后数据的完整性要保持一致

比如银行转钱,不能小猪的钱扣掉了,而小熊的钱没增加,这样数据的完整性就被破环了

隔离性

多个用户并发的访问数据库时,各事务之间互不干扰

小猪修改数据库中一张表的信息,小熊同时也在修改这张表,这样两个事务之间就会产生影响,要将这两个事务隔离开来.

可以通过设置隔离级别来解决

DEFAULT

READ_UNCOMMITED        隔离级别最低,啥都解决不了

READ_COMMITED        解决了脏读

REPEATABLE_READ        解决了脏读,不可重复读

SERIALIZABLE        都解决了


脏读     读到还未提交的数据

不可重复读     读到了update后的数据,有可能多次读取同一数据的结果不一致

幻读       读到了insert后的数据,就是发现了之前读取不存在的数据

持久性

事务一旦提交,数据的修改是永久的

Spring接口介绍

spring在事务管理中提供的接口

Spring事务管理高层抽象的主要的三个接口

PlatformTransactionManager   事务管理器

spring为不同的持久层框架提供不同的接口实现

org.springframework.jdbc.datasource.DataSourceTransaction          使用Spring JDBC 或 iBatis

TransactionDefinition    事务定义信息(隔离,  传播,  超时,  只读)

隔离级别

DEFAULT

READ_UNCOMMITED

READ_COMMITEAD

REPREATABLE_READ

SERIALIZABLE

传播行为

(保证多个操作在同一个事务中)

PROPAGATION_REQUIRED    支持当前事务,不存在就创建一个

PROPAGATION_SUPPORT     支持当前事务,不存在就不用事务

PROPAGATION_MANDATORY     支持当前事务,不存在就抛出异常

(保证多个操作不在同一个事务中)

PROPAGATION_REQUIRES_NEW    挂起当前事务,创建新事务.不存在,创建新事务

PROPAGATION_NOT_SUPPORTED  挂起当前事务,不使用事务

PROPAGATION_NEVER    当前有事务,则报出异常

嵌套式事务

PROPAGATION_NESTED     如果A中存在事务,则在A事务执行完成后设置保存点,执行B操作,如果出现异常,则可以选择回滚到初始或者到保存点处

TransactionStatus    事务具体运行状态

事务管理方式

编程式的事务管理

使用XML配置声明式的事务管理(通过AOP实现)

前期准备

首先使用xxx.properties文件配置连接池

配置c3p0连接池

   

   

    

    

让DaoImp extends  JdbcDaoSupport,就不需要在DaoImp中再写JdbcTemplate成员了,在配置文件bean中注入上面创建好的连接池对象,dataSource即可.

主要步骤

配置事务管理器    PlatformTransactionManager

   

配置事务增强(Advice)

   

       

       

   

AOP的配置

   

    

使用注解方式声明事务的管理

配置事务管理器

开启事务注解

在业务层添加注解

@Transactional


                                       努力生活,自得其乐  ——   2019.03.26

你可能感兴趣的:(Spring学习(三 AOP注解开发和事务))