Spring AOP,通知使用,spring事务管理,spring_web搭建

news2024/12/27 11:30:54

spring AOP

AOP概述

AOP面向切面编程是对面向对象编程的延续(AOP (Aspect Orient Programming),直译过来就是 面向切面编程,AOP 是一种编程思想,是面向对象编程(OOP)的一种补充。)

面向切面编程思想是将程序中非业务代码(提交事务,打印日志,权限验证,统一异常处理)提取分离出来,通过代理对象帮助我们调用这些提取出来的非业务代码,在业务代码中不用显示调用非业务代码,最终做到了也业务代码与非业务代码的分离,降低了耦合度。

面向切面编程,是实现在不修改源代码的情况下给程序动态统一添加额外功能的一种技术,AOP 采取横向抽取机制(动态代理),取代了传统纵向继承机制的重复性代码,其应用主要体现在事务处理、日志管理、权限控制、异常处理等方面。简单的说,AOP 的作用就是保证开发者在不修改源代码的前提下,为系统中的业务组件添加某种通用功能。

原理:动态代理模式

AOP编程思想是java中的,不是spring专有的是spring使用了这一编程思想

实现

首先导入jar包

AspectJ 是一个基于 Java 语言的 AOP 框架,它提供了强大的 AOP 功能,且其实

现方式更为简捷,使用更为方便, 而且还支持注解式开发。所以,Spring 又

将 AspectJ 的对于 AOP 的实现也引入到了自己的框架中。

开启自动代理,在spring文件里面开启自动代理

创建自动代理的类,加入注解标签,

@before在运行连接点方法之前执行,传入参数为在com.ffyc.spring.dao.adminDao类下面的所有的方法,都是切入点,(..)里面传入的参数不定,最前面的*表示方法返回值任意。

@after是在运行后执行,无论前面出现没有异常

运行结果

@AfterThrowing 运行时出现错误执行,通过throwing可以得到异常出现的原因

@AfterReturning 运行时出现异常不进行执行

@around环绕通知

运行结果

spring事务管理

概述

事务管理本质上是数据库提供的一种管理机制(数据库事务管理就是对一次数据库操作过程中执行的多条语句进行管理,保证一次对数据库操作过程中多条 sql 要么都执行成功,要么都不执行,从而确保数据一致性.)

事务的作用就是为了保证用户的每一个操作都是可靠的,事务中的每一步操作都必须成功执行,只要有发生异常就回退到事务开始未进行操作的状态,这些操作要么都完成,要么都取消,从而保证数据满足一致性的要求

Spring事务管理是spring框架对事务提交这一功能进行封装,程序员在业务开发中不需要显示提交事务。

Spring 中的事务管理分为两种形式:

  1. 编程式事务

需要程序员自己在代码里面控制事务触发和回滚

  1. 声名式事务

声名式事务底层使用了AOP思想,可以为方法添加事务功能,他的控制是方法级别的

Spring 框架,提供事物管理实现类是 DataSourceTransactionManager.

实现

1.配置事务管理

需要提交事务的方法上面加上注解@Transactional

没有出现异常的话事务会正常提交,出现异常的话事务会发生回滚,要么全发生,要么都不发生。需要注意的事情是如果此方法加上了@AfterThrowing 运行时出现错误执行,通过throwing可以得到异常出现的原因 或者 加上了@around环绕通知 会对@Transactional事务提交造成影响,他们会对异常进行捕获,@Transactional就不知道方法里面执行错误了,还会提交错误的事务。

@Transactiona可以添加在方法上面,也可以添加到类上面,添加到类上面,此类里面所有的方法都会被提交事务所管理。

一般情况下,@Transactiona都添加在service层

声名事务失效场景

  1. @Transactiona用在了非public方法上面

同一包下面,默认的格式可以调用

添加@Transactiona注解,要么全部提交要么全不提交,运行结果确是提交了一条,出现异常未发生回滚,没有触发事务。

  1. 方法中异常被捕获了,@Transactiona认为方法上面没有异常

发生异常被捕获后@Transactiona认为方法上面没有异常其实已经出错了,事务提交也只是提交了一条数据,没有全部提交

2.方法中出现编译器异常,还是会提交事务

 @Transactional(rollbackFor = Exception.class)这样就可以,出现编译器异常事务就不会提交了。

  1. 编译器异常也会影响@Transactiona提交事务

  1. 数据库引擎不支持提交事务  mysql中只有innodb支持提交事务

spring_web搭建

Ssm框架

早期ssm=spring+strtuts2+mybatis    ssh

现在 ssm=spring+springweb+mybatis

搭建

1.导包

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-webmvc</artifactId>

<version>5.2.2.RELEASE</version>

</dependency>

2.在web.xml配置spring核心请求分发器

在spring.xml中开启web层注解

<!--开启web层注解-->
   
<mvc:annotation-driven></mvc:annotation-driven>

3.部署tomcat

写一个测试

Springweb运行流程

Springweb组件

前端控制器:DispatcherServlet(不需要程序员开发),由框架提供,在web.xml 中配置。

作用:统一处理请求和响应,整个流程控制的中心,由它调用其它组件处理用户的请求.

处理器映射器:HandlerMapping(不需要程序员开发),由框架提供。

作用:根据请求的 url 查找 Handler(处理器/Controller)

处理器适配器:HandlerAdapter(不需要程序员开发),由框架提供。

作用:按照特定规则(HandlerAdapter 要求的规则)去执行 Handler。

处理器:Handler(也称之为 Controller,需要工程师开发)。

注意:编写 Handler 时按照 HandlerAdapter 的要求去做,这样适配器才可

以去正确执行 Handler。

作用:接受用户请求信息,调用业务方法处理请求,也称之为后端控制器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2118318.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开放系统,面向各类业务需求可提供定制化服务的智慧物流开源了

智慧物流视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。构建基于Ai技术的…

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中&#xff0c;能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候&#xff0c;一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具&#xff01; 365在线转文字 直达链接&…

性能测试工程师必须掌握的诊断工具及应用实例

“工欲善其事&#xff0c;必先利其器”&#xff0c;那么作为一名性能测试工程师需要了解到的诊断工具有哪些呢&#xff1f;在实际工作中要怎么去应用呢&#xff1f; 1、应用层报文抓取工具-HTTPWatch 快速定位请求、响应时间 快速查找请求、响应完整HTTP报文 快速定位请求、…

1、程序如何生成和运行

程序如何生成和运行 一、生成可执行文件1、 源文件2、 预处理&#xff1a;g -E hello.cpp -o hello.i //将头文件&#xff0c;宏定义等替换到源文件3、 编译&#xff1a;g -S hello.i -o hello.s // 生成汇编代码4、 汇编&#xff1a;g -c hello.s -o hello.o // 生成二进制目标…

【区块链 + 基层治理】链动社区:基于 FISCO BCOS 的智慧社区数字化治理平台 | FISCO BCOS应用案例

“链动社区——基于 FISCO BCOS 的智慧社区数字化治理平台”是智慧社区治理服务一套完整系统&#xff0c;通过使用 FISCO BCOS 联盟链方案进行社区数据管理&#xff08;积分交易数据和行为数据等&#xff09;、对社区工作进行数字化支持&#xff0c;激发社区治理的多元主体参与…

Linux相关概念和重要知识点(1)(交互方式、存储结构、定位方式)

1.Linux是什么&#xff1f; Linux是一款继Unix之后开发的一款开源操作系统。 操作系统是基础性系统软件&#xff0c;是人机交互的一个媒介&#xff0c;我们日常使用的Windows、iOS、Android都是操作系统&#xff0c;用户都是和操作系统打交道的。像Windows、iOS是闭源的&…

【西电电装实习】流水灯(高级贴片焊接练习)

前言 说明书 左边实现流水&#xff0c;右边实现灯&#xff0c;灯与灯之间独立 此练习板具有功能 注意事项 不能焊错芯片&#xff0c;会影响功能先焊右侧比较好焊的用万用表检测电路质量 引脚序号 有圆点是第一个脚&#xff0c;然后逆时针按自然数顺序标引脚

随手记:uniapp小程序登录方式和小程序使用验证码登录

小程序登录方式&#xff1a; 方式一&#xff1a;小程序授权登录 通过uni.login获取 临时登录凭证code&#xff0c;向后端换取token。 <u-button type"primary" shape"circle" click"login">登 录</u-button>login() {uni.login({p…

零基础国产GD32单片机编程入门(十六)DMA详解及ADC-DMA方式采集含源码

文章目录 一.概要二.GD32F103C8T6单片机DMA外设特点三.GD32单片机DMA内部结构图四.DMA各通道请求五.GD32F103C8T6单片机ADC-DMA采集例程六.工程源代码下载七.小结 一.概要 基本概念&#xff1a; DMA是Direct Memory Access的首字母缩写,是一种完全由硬件执行数据交换的工作方式…

QML学习三:qml设计器报错 Line: 0: The Design Mode requires a valid Qt kit

开发环境:Qt 6.5.3 LTS 1、Qt 6.5.3 LTS 2、Pyside6 3、Python 3.11.4 4、win11 默认不打开设计器的时候可以看到我们默认是有Python的环境,而且点击运行是可以运行的。但是当打开qml设计器时提示下面这个错误,提示需要一个可用的套件。 解决办法: 点击+号创建新的套件…

迈向新一代星地融合的高速测试解决方案

一、面向未来下一代通信技术的射频测试挑战 移动通信网络的发展如下图所示&#xff0c;1G时代用模拟信号传输&#xff0c;实现了语音传输业务&#xff1b;2G时代&#xff0c;数字传输取代了模拟传输&#xff0c;人们能够使用手机短信和手机上网&#xff1b;3G时代&#xff0c;…

推动生态系统架构创新与可持续发展的关键引擎——The Open Group 2024年度大会全解析

在当今快速变化的数字化转型浪潮中&#xff0c;开放标准正逐渐成为推动企业创新和生态系统架构发展的重要力量。为了帮助企业在实现可持续发展的道路上加速推进&#xff0c;The Open Group 2024生态系统架构与可持续发展年度大会将为架构师、技术专家以及企业CIO、CTO提供一个深…

直流充电桩测试仪优势和特点

直流充电桩测试仪是一种专门用于检测和测试直流充电桩性能的设备。它的主要功能是对充电桩的各项参数进行精确测量&#xff0c;确保其正常工作&#xff0c;提高充电效率和安全性。以下是直流充电桩测试仪的优势和特点&#xff1a; 1. 高精度测量&#xff1a;直流充电桩测试仪具…

【AcWing】861. 二分图的最大匹配(匈牙利算法)

匈牙利算法&#xff0c;他可以在比较快的时间复杂度之内告诉我们左边和右边成功匹配的最大数是多少 匹配指的是边的数量&#xff0c;成功的匹配指的是两个未被使用的点之间存在一条边(就不存在两条边共用了一个点的)。 匈牙利算法可以返回成功匹配的最大匹配数是多少。 #incl…

【AcWing】860. 染色法判定二分图

二分图&#xff0c;把所有点划分到两边去&#xff0c;使得所有边都是在集合之间的&#xff0c;集合内部没有边。 一个图是二分图&#xff0c;当且仅当图中不含奇数环(环的边数是奇数)。这是个充分必要条件&#xff0c;是二分图就一定不含奇数环&#xff1b;不含奇数环就一定是…

工业设备网关在智能工厂建设中发挥的作用,以某汽车制造厂为例

在当今工业4.0的大潮中&#xff0c;智能化和数字化已经成为制造业发展的关键驱动力。工业设备网关&#xff0c;作为连接工业现场设备与上层系统的纽带&#xff0c;其作用不可小觑。本文将以某汽车制造厂的智能化改造项目为例&#xff0c;详细探讨工业设备网关在实际应用中的优势…

CS5363|CS5263升级方案|DP转HDMI 4K60HZ芯片方案

CS5363是一种高度集成的单芯片&#xff0c;适用于多个细分市场和显示应用&#xff0c;如Typec扩展、手机/电脑投屏、扩展底座、投影仪等。 CS5363管脚分布情况如下&#xff1a; CS5363是一款高度集成的单芯片&#xff0c;适用于多个mGeneral 支持最高分辨率/定时4k60Hz 支持…

饿了么官方霸王餐API接口该如何对接?

外卖霸王餐API接口是一种为餐饮行业设计的应用程序编程接口&#xff0c;它允许第三方平台或应用程序与外卖平台进行数据交换和功能集成。通过这种接口&#xff0c;商家可以实现自动化管理&#xff0c;提高运营效率&#xff0c;同时为消费者提供更加便捷和个性化的服务体验。 霸…

记录debug分析nacos源码

nacos源码分析 一、环境构建二、源码分析1. 启动类2. 源码的中的案例3.. 服务订阅流程梳理3.1. 从 NamingFactory.createNamingService(properties);说起3.2. 服务订阅总结 4. 服务注册流程梳理4.1. 从 naming.registerInstance("nacos.test.3", "11.11.11.11&q…

【文心智能体】通过工作流使用知识库来实现信息查询输出,一键查看旅游相关信息,让出行多一份信心

欢迎来到《小5讲堂》 这是《文心智能体平台》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 创建灵感基本配置头像名称和简介人物设定角色与目标思考路…