当前位置: 首页 > news >正文

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

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.lryc.cn/news/436746.html

相关文章:

  • PHP无缝对接预订无忧场馆预订系统小程序源码
  • Unet改进30:添加CAA(2024最新改进方法)|上下文锚定注意模块来捕获远程上下文信息。
  • OpenAI震撼发布最强模型o1!强化学习突破LLM推理极限
  • 速通GPT-2:Language Models are Unsupervised Multitask Learners全文解读
  • Python 最小公倍数计算器:从基础到应用
  • 网络学习-eNSP配置路由器
  • 在 React 中,如何使用 Context API 来实现跨组件的通信?
  • 【基础算法总结】位运算
  • 组件通信——provide 和 inject 实现爷孙组件通信
  • 【ShuQiHere】探索人工智能核心:机器学习的奥秘
  • LeeCode打卡第二十四天
  • 什么是科技与艺术相结合的异形创意圆形(饼/盘)LED显示屏
  • AI大模型知识点大梳理_ai大模型知识学习,零基础入门到精通,收藏这一篇就够了
  • NVG040W语音芯片:为制氧机带来个性化语音提示和报警功能
  • OpenCV结构分析与形状描述符(12)椭圆拟合函数fitEllipseAMS()的使用
  • 安卓显示驱动
  • java重点学习-集合(List)
  • 【PCB测试】最常见的PCB测试方法
  • AtCoder Beginner Contest 370 ABCD题详细题解(C++,Python)
  • 斯坦福研究人员探讨大型语言模型在社交网络生成中的应用及其在政治同质性上的偏见
  • 一招教你找到Facebook广告的最佳发帖时间
  • 【数据库】MySQL-基础篇-多表查询
  • MongoDB事务机制
  • 大模型 LLM(Large Language Models)如今十分火爆,对于初入此领域的新人小白来说,应该如何入门 LLM 呢?是否有值得推荐的入门教程呢?
  • Python实现模糊逻辑算法
  • MATLAB、FPGA、STM32中调用FFT计算频率、幅值及相位差
  • 基于SSM的医院药品库存系统的设计与实现---附源码76620
  • Jupyter管理内核命令
  • 简单分享-获取.txt文件内数据 文件内数据逗号分隔 分隔符 C语言
  • 从0开始手把手带你入门Vue3