目录

一、springAOP 面向切面编程

(一)springAOP概念解析

(二)springAOP的XML文件配置

1.入门案例

2.AOP的工作流程

3.通知类型

4.切点表达式

5.配置所有通知类型

(三)springAOP通过注解去配置

二、springAOP对事务的支持

(一)事务的简介

1.jdbc中的事务

2.spring中的事务控制

3.spring中事务管理的核心类和方法

(二) 使用xml配置事务

1.使用spring创建一个转账的功能实现

(1)pom.xml依赖

(2)创建一个tx事务管理头的模板

(3)创建spring核心配置文件

(4)创建业务层

(5)测试转账的方法

(6) 为写好的代码添加事务

(三) 使用注解来实现事务(了解)


一、springAOP 面向切面编程

(一)springAOP概念解析

AOP aspect orineted programming 面向切面编程

通过预编译和运行期间的动态代理去实现的程序和功能统一维护的一种技术

AOP是一种编程范式是OOP的延续,是在OOP的基础上对程序进行的一种横向开发

AOP注重的不是每一层如何开发的,而是注重每一层各个模块之间的共性功能

比如要添加的共性功能比如事务、日志、各种统计等。

专业术语解析

连接点 (join point) :程序运行的时间点 ,比如方法执行前,方法执行后,出现异常后。

springAOP join point 是方法的执行点,只有方法才有连接点。

切点(cut point):(要往哪个方法去创建连接点)

aop 提供了一组规则,用这组规则去切(匹配)连接点,匹配出来的就叫切点

springAOP提供了切点表达式来表示这个规则

切点的单位是方法

增强(advice):

就是指具有具体意义的功能,比如事务管理

增强就是在原有代码上要添加的功能

织入(weaving):

这是一个动作,就是将要添加的功能即增强添加到核心代码上的过程。

目标对象(target):

在核心代码织入后产生的的代理对象(就是代理类对象)

切面(ascept):

在AOP中是一个概念,里面包含切点和增强

增强定义切面任务在什么时候执行,切点定义在什么位置切入

也就是说切面定义什么样的增强功能,切入到核心方法的哪个位置

(二)springAOP的XML文件配置

1.入门案例

springAOP底层是通过动态代理和cglib代理来实现的面向切面编程,在正常使用的情况下,spring使用动态代理来实现,如果需要使用cglib代理,需要手动配置。正常情况下,我们需要创建接口。

案例:在原有代码基础上添加日志打印功能。

(1)参加项目,导入依赖

<properties><spring-version>5.1.5.RELEASE</spring-version>
</properties>
<dependencies><!--spring-context--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring-version}</version></dependency><!--导入springtest--><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring-version}</version></dependency><!--导入spring-aop依赖--><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring-version}</version></dependency><!--织入依赖包--><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.5</version></dependency>
</dependencies>

(2)使用spring注解创建各种功能

持久层接口:

持久层实现类:

业务层接口:

业务层实现类:

(3)创建spring的核心配置文件

(4)创建web的测试类,运行方法

(5)创建增强类

(6)修改核心配置文件,配置AOP

要添加aop配置,需要添加aop约束:

测试:根据切面将增强添加到原有的方法上了

2.AOP的工作流程

开发阶段:

正常开发,然后发现共性功能需要添加,开发增强,制作切点,在配置文件中,声明切点和增强之间的关系形成切面

运行阶段:

JVM读取配置文件,监控切点对应的方法执行,一旦方法开始执行,使用代理机制动态创建目标对象

3.通知类型

aop中后面添加的内容  在aop中叫通知。

before :前置通知。  在方法前执行的增强。

after-returning 后置通知   在方法的后面执行的增强,如果方法执行的时候有异常,就不会执行。

after-throwing 异常通知   在方法执行出现异常后,添加的增强

after :最终通知    无论方法是否出现异常,都在方法后面添加的增强。

around : 环绕通知     可以在方法的任何时候添加增强

4.切点表达式

在配置文件中 使用 expression = 属性  来定义切点表达式。在定义表达式的时候必须要将表达式写在execution()    中

完整的切点表达式

void cn.offcn.service.UserSeriverImpl.addUser()

在切点表达中可以使用模糊匹配来完善表达式:

* :任意多个字符的匹配

.   :任意的以及包的路径

..  :匹配一级或者多级包的路径

(..)  : 表示入参是任意多个  类型任意

常用匹配任意业务的方法

* cn.offcn.service..*Impl.add*(..)

5.配置所有通知类型

添加通知:

修改配置文件:

在创建一个personService业务逻辑类:

测试:

结果:

如果在方法中添加一个异常:

结果:

(三)springAOP通过注解去配置

如果要使用springAOP注解来配置,就需要在spring核心配置文件中修改:

开发通知:创建一个通知类:

在该类中,使用注解来标明对应的通知类型,以及切点:

对应通知类型的注解来标明:

可以在当前的类中将表达式提取出来:

在当前类中可以使用方法来替代表达式:

测试:

结果:

 二、springAOP对事务的支持

(一)事务的简介

1.jdbc中的事务

数据库的事务:

数据库事务就是访问数据库的时候,将各种增删改操作合到一个操作序列,合并成一个事务。当前事务所有的操作,要么都成功,要么都失败,让这个事务形成一个不可分割的整体。在这个事务开始和结束之间的内容都是数据库的操作。

系统中中的事务:

系统的事务是指 处理一系列业务逻辑的执行单元,该单元一系列操作要么都成功要么都失败。

事务的特性:

原子性:事务是不可分割的整体

一致性:事务中所有的操作结果都是一样的(要么都成功要么都失败,这个状态要一致)

隔离性:事务与事务之间是相互隔离的,互不影响(这里是指不影响原子性和一致性)

持久性:事务最终执行的结果影响到数据库,事务的改变是永久性的

2.spring中的事务控制

可以分为两种,编程式事务和声明式事务。spring官方推荐声明式事务。

声明式事务是通过springAOP实现的。

本质上就是利用AOP功能,在要添加事务的模块、方法上、前置添加事务的开启、后置添加事务的提交,异常添加事务的回滚,最终添加事务的关闭

声明式事务的特点:

可以将事务和业务代码完全分离,通过配置的方式实现事务,在开发过程中不用担心事务是怎么设置、配置的。

声明式事务的不足:

只能做到方法级别上的事务管理,无法和编程式事务一样做到代码级别上的事务管理。

3.spring中事务管理的核心类和方法

在spring框架中有一个模块叫spring-tx,专门用来做事务管理的

该jar包下主要的类:

(1)事务管理平台

不同插件使用的是不同的事务管理平台(要整合不同的插件,需要设置不同的事务管理平台,mybatis和jdbc用的是一个管理平台)

(2)事务的运行状态

TransactionStatus  类  来查看事务状态

查看事务是否是最新的,是否有回滚点,是否是只回滚的事务,可以刷新事务的状态。

(3)TranscationDefintion

事务的 设置类

可以通过该类为当前的事务做一些设置。

可以设置是否只读、数据库的隔离级别、可以设置事务的传播行为。

(4)事务的传播行为

一个事务碰到另外一个事务会发生什么。

可以设置七个属性

(5)事务的只读模式

只能查看不能修改  属性中有一个read_only

(6)事务的超时设置

timeout  可以设置事务超时时间 。以秒为单位 -1 表示无限制。

(二) 使用xml配置事务

1.使用spring创建一个转账的功能实现

不能使用dbuitls

(1)pom.xml依赖

<properties><spring-version>5.1.5.RELEASE</spring-version>
</properties>
<dependencies><!--spring-context--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring-version}</version></dependency><!--导入springtest--><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring-version}</version></dependency><!--导入spring-aop依赖--><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring-version}</version></dependency><!--spring-jdbc--><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring-version}</version></dependency><!--spring-tx事务管理--><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring-version}</version></dependency><!--织入依赖包--><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.5</version></dependency><!--mysql连接包--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><!--导入junit依赖--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency>
</dependencies>

(2)创建一个tx事务管理头的模板

(3)创建spring核心配置文件

(4)创建实体类、持久层

实体类:

持久层接口:

实现类:

创建resultset转化为account的类:

(4)创建业务层

接口:

实现类:

(5)测试转账的方法

结果:

修改业务层,添加错误:

结果:

数据库  没有添加事务 钱总数少了

(6) 为写好的代码添加事务

在spring核心配置文件中:

测试:

数据库:

在日常配置事务的时候,可以这样来配置:

声明式的事务可以在代码实现前配置,在代码开发的时候只要根据规则来起名字,就可以让该方法添加事务。

(三) 使用注解来实现事务(了解)

修改配置文件:

修改业务层代码:

在需要添加事务的方法上添加注解:

测试:

数据库:

springAOP面向切面编程以及对事务的支持相关推荐

  1. 五分钟学会 SpringAOP 面向切面编程

    SpringAOP 面向切面编程: 面向切面编程:将函数拦截做其他的事而不影响正常的业务流程. 出发点:核心代码与普通代码分离,减少重复代码,降低耦合度. 一,如何让spring项目支持面向切面编程: ...

  2. SpringAop面向切面编程使用详解

    一.AOP概述 1.1 AOP的概念 AOP(Aspect Oriented Programing)面向切面编程. 它是一种编程范式,属于软工范畴,指导开发者如何组织程序结构. 它是是通过预编译方式和 ...

  3. 【Spring】面向切面编程AOP

    AOP基础 什么是AOP [废话解释]在软件业,AOP全称Aspect Oriented Programming 即:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AO ...

  4. Spring 面向切面编程

    AOP,也就是面向方面编程或者说面向面编程,是一种很重要的思想.在企业级系统中经常需要打印日志.事务管理这样针对某一方面的需求,但是传统的面向对象编程无法很好的满足这些需求.因此催生了面向切面编程这样 ...

  5. Spring(4)——面向切面编程(AOP模块)

    Spring AOP 简介 如果说 IoC 是 Spring 的核心,那么面向切面编程就是 Spring 最为重要的功能之一了,在数据库事务中切面编程被广泛使用. AOP 即 Aspect Orien ...

  6. 服务端第三次课程:面向切面编程AOP

    3:面向切面编程AOP 1:回顾 bean的组装方式 规划的装配 component autowired sacn是在configuration底下的 Java config 使用configurat ...

  7. Spring-学习笔记08【面向切面编程AOP】

    Java后端 学习路线 笔记汇总表[黑马程序员] Spring-学习笔记01[Spring框架简介][day01] Spring-学习笔记02[程序间耦合] Spring-学习笔记03[Spring的 ...

  8. 大数据WEB阶段Spring框架 AOP面向切面编程(一)

    Spring - AOP面向切面编程(一) 一.代理模式概述 代理的特点:(目标对象即被代理者) 实现和目标对象相同的接口 具备和目标对象的方法 代理者不仅要做目标对象的方法 , 还要做一些额外的操作 ...

  9. Spring面向切面编程

           JAVA就业套餐课:https://edu.csdn.net/combo/detail/1230 第1章主要介绍了Spring管理实体对象的应用,通过ApplicationContext ...

最新文章

  1. 根据API创建BOM(Itpub)
  2. tomcat的JK和JK2
  3. ElementUI项目请求SpringBoot后台项目时提示:Access to XMLHttpRequest at **from origin ** has been blocked by CORS
  4. SAP UI5 视图如何使用工程里的 sample data 作为 JSON model 的数据源
  5. eclipse中查看某个方法(函数)被谁调用
  6. react学习(66)--ant design中Model宽度
  7. c语言 宏定义 去除宏定义_如何检查是否在C中定义了宏?
  8. Linux下vsftpd基本配置和虚拟用户设置的安全方法
  9. JZ32 从上往下打印二叉树
  10. 自己总结一下wpf image source 绑定的几种方式
  11. Dataset增加行数据及常用方法
  12. Redis 安装,主从配置及Sentinel配置自动Failover
  13. OFFICE技术讲座:段落五种对齐方式的说明
  14. 《郭大侠的妹妹不可能那么可爱》 第一章 郭大侠那可爱的妹妹?
  15. SQL根据身份证判断性别
  16. c语言中sprint的用法
  17. The Dominant Color (20)
  18. 面试:Jetpack相关
  19. 微软小娜 服务器连不上,windows10小娜连不上网络怎么办 win10小娜无法连接网络如何解决...
  20. 软件测试中测试版本的质量状况,测试结果分析和质量报告

热门文章

  1. 【CSS】鼠标移入显示禁用图标
  2. 大量路由器DNS被篡改 跳转至涉黄涉赌网站
  3. U-boot中LPDDR4关键参数的意义
  4. Wireshark的简单抓包QQ的过程
  5. 迷你世界服务器维护完成,《迷你世界》家园玩法再更新!新增日常任务设定,玩家:劳逸结合...
  6. easyUI tree 异步加载数据
  7. C语言中float值的比较
  8. layui文件树Dtree的使用
  9. windows添加本地DNS方法
  10. ADB命令判断手机是否锁屏