Spring ----深入理解AOP(面向切面编程)

给程序做增强
事务是最小的执行单元,转账,同时成功、同时失败
TxUtils类式事务管理类,有6个静态方法,可以直接通过类名来调用,threadlocal线程池,还有一个静态代码块,来加载链接
从数据源中获取链接,加入到线程池中保存链接,来保证事务用的是同一个链接
开启事务:获取链接获取到链接开启事务,如果没有获取到链接就创建一个链接
事务回滚、事务提交:都是在开启事务后执行的,一定有链接
关闭数据连接:如果数据连接不为空就关闭,并不是真的关闭,而是把链接还给数据库连接池。关闭数据连接意味着会话结束,线程池里的东西也要关掉
只做接口,不做实现
如果业务层里面实现多个业务(方法),每个方法都需要进行事务的开启、提交、回滚,这些都是重复行代码,产生了AOP。AOP的目的:通过代理商知道方法之前之后出现异常应该做什么。对程序进行横向的增强。
为什么要动态代理?
将增强的代码(开启事务、提交事务、事务回滚)提取出来成为一个复用的代码,那么业务层的方法秩序关注自己的业务逻辑,不需要关注事务了
代理类,目的:代理account service实现程序扩展,进行事务管理,目标对象只需要关注具体业务。
jdk动态代理是基于接口实现的
什么时候来创建对象、代理类的接口 (数组)、反射目标的方法------proxy.newproxyinstance()的三个参数
invoke(目标方法的类型,目标方法的参数)
AOP概念
· 耦合度降低,提高程序的可重用性,同时提高了开发的效率;
AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码
在不修改源代码的前提下,对程序进行增强!!(为什么要使用AOP)
AOP的优势:减少重复代码、提高开发效率、维护方便
AOP底层原理:jdk的动态代理
JDK的动态代理技术
​ 1、为接口创建代理类的字节码文件
​ 2、使用ClassLoader将字节码文件加载到JVM
​ 3、创建代理类实例对象,执行对象的目标方法
AOP的相关术语
Joinpoint( 连接点 ) 所谓连接点是指那些被拦截到的点。在 spring , 这些点指的是方法 , 因为 spring 只支持方法类型的连接点----------- 代理对象中被代理的方法
Pointcut( 切入点 ) -- 所谓切入点是指我们要对哪些 Joinpoint 进行拦截的定义------- 在代理方法运行之前开启事务
Advice( 通知 / 增强 )-- 所谓通知是指拦截到 Joinpoint 之后所要做的事情就是通知 . 通知分为 前置通知(开启事务) , 后置通知(事务提交) , 异常通知(事务回滚) , 最终通知(资源关闭) , 环绕通知(前面的所有,但是需要自己写) ( 切面要完成的功能 )---------开启事务、事务提交、回滚事务、资源关闭
Target( 目标对象 )-- 代理的目标对象------------accountserviceimpl
Weaving( 织入 )-- 是指把增强应用到目标对象来 创建新的代理对象的过程
Proxy (代理) -- 一个类被 AOP 织入增强后,就产生一个结果 代理类
Aspect( 切面 )-- 切入点和通知 的结合,以后咱们自己来编写和配置的
AOP配置文件
导入三个依赖
<!-- AOP联盟 --> <dependency> <groupId>aopalliance</groupId> <artifactId>aopalliance</artifactId> <version>1.0</version> </dependency> <!-- Spring Aspects spring整合的--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>5.0.2.RELEASE</version> </dependency> <!-- aspectj 切面类的--> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.3</version> </dependency>
AOP案例
  • 配置文件方式
代理类
切入点表达式
环绕通知
AOP的通知类型
1.     前置通知 目标方法执行前,进行增强。
2.     最终通知 目标方法执行成功或者失败,进行增强。
3.     后置通知 目标方法执行成功后,进行增强。
4.     异常通知 目标方法执行失败后,进行增强。环绕通知 目标方法执行前后,都可以进行增强。目标对象的方法需要手动执行
  • 半注解方式
配置文件中开启AOP自动代理
  • 纯注解

测试类加载配置类文件
拦截器方法执行两次,springmvc,由三个方法,在配置文件中配置,可以配置多个拦截器
过滤器javaweb的三大组件之一基于tomcat

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue源码分析(十)—— 生命周期

文章目录 前言一、关键方法 callHook二、详细的钩子函数说明1.beforeCreate和create2.beforeMount & mounted注意点组件&#xff08;非根组件&#xff09;的渲染节点&#xff08;1&#xff09;invokeInsertHook函数&#xff08;2&#xff09;insert方法&#xff08;3&#…

docker离线安装及部署各类中间件(x86系统架构)

前言&#xff1a;此文主要针对需要在x86内网服务器搭建系统的情况 一、docker离线安装 1、下载docker镜像 https://download.docker.com/linux/static/stable/x86_64/ 版本&#xff1a;docker-23.0.6.tgz 2、将docker-23.0.6.tgz 文件上传到服务器上面&#xff0c;这里放在…

【WIN11新机/重装系统 把尿级系统设置优化】

目录 一、更改鼠标样式二、更改显示器刷新率三、常规文件存储路径0.存储感知1.保存新内容的地方2.快捷访问的文件路径3.Edge浏览器下载路径 四、通知关闭五、开机自启动关闭六、隐私关闭七、性能优化1.开机优化2.用户账控制关闭 八、关闭Windows自动更新九、任务栏设置十、必装…

7.若依参数设置、通知公告、日志管理

参数设置 对系统中的参数进行动态维护。 关闭验证码校验功能 打开页面注册功能 需要修改前端页面代码 通知公告 促进组织内部信息传递 若依只提供了一个半成品&#xff0c;只实现了管理员可以添加通知公告。 日志管理 追踪用户行为和系统运行状况。 登录日志 和操作日志…

修改网络ip地址方法有哪些?常用的有这四种

在数字时代&#xff0c;IP地址作为网络设备的唯一标识&#xff0c;对于网络连接和通信至关重要。然而&#xff0c;有时候我们可能需要修改设备的IP地址&#xff0c;以满足特定的网络需求或解决网络问题。本文将为您详细介绍几种修改网络IP地址的常用方法&#xff0c;无论是对于…

【Java项目】基于SpringBoot的【外卖点餐系统】

【Java项目】基于SpringBoot的【外卖点餐系统】 技术简介&#xff1a;本系统使用JSP技术&#xff0c;采用B/S架构、Spring Boot框架、MYSQL数据库进行开发设计。 系统简介&#xff1a;管理员&#xff1b;首页、个人中心、用户管理、商家管理、菜品分类管理、骑手管理、系统管理…

Spring Boot教程之三十九: 使用 Maven 将 Spring Boot 应用程序 Docker 化

如何使用 Maven 将 Spring Boot 应用程序 Docker 化&#xff1f; Docker是一个开源容器化工具&#xff0c;用于在隔离环境中构建、运行和管理应用程序。它方便开发人员捆绑其软件、库和配置文件。Docker 有助于将一个容器与另一个容器隔离。在本文中&#xff0c;为了将Spring B…

计算机网络|数据流向剖析与分层模型详解

文章目录 一、网络中的数据流向二、计算机网络通信模型1.OSI 模型2.TCP/IP 模型3.TCP/IP五层模型3.1 分层架构描述3.2各层地址结构3.3UDP数据包报头结构 三、总结 一、网络中的数据流向 在计算机网络中&#xff0c;数据的流向是指数据从发送端到接收端的传输路径。数据流向涉及…

uniapp——微信小程序,从客户端会话选择文件

微信小程序选择文件 文章目录 微信小程序选择文件效果图选择文件返回数据格式 API文档&#xff1a; chooseMessageFile 微信小程序读取文件&#xff0c;请查看 效果图 选择文件 /*** description 从客户端会话选择文件* returns {String} 文件路径*/ const chooseFile () &g…

vue3+vite+nginx打包

在开发环境下&#xff0c;已经可以正常地运行一个有增删改查功能的页面了&#xff0c;但如何把它发布到运行服务器呢&#xff1f;仍有许多的问题需要探索。 网上很多文章给了很大的帮助&#xff0c;但总是没有说明原理&#xff0c;对于像我这样的初学者来说&#xff0c;不知其…

CAN201 Introduction to Networking(计算机网络)Pt.2 传输层

文章目录 3. Transport Layer&#xff08;传输层&#xff09;3.1 Multiplexing and demultiplexing&#xff08;多路复用和多路分解&#xff09;3.2 Connectionless transport&#xff1a;UDP3.3 Principles of reliable data transfer3.4 Pipelined communication3.5 TCP: con…

JVM 详解

一. JVM 内存区域的划分 1. 程序计数器 程序计数器是JVM中一块比较小的空间, 它保存下一条要执行的指令的地址. [注]: 与CPU的程序计数器不同, 这里的下一条指令不是二进制的机器语言, 而是Java字节码. 2. 栈 保存方法中的局部变量, 方法的形参, 方法之间的调用关系. 栈又…

Docker--Docker Network(网络)

Docker为什么需要网络管理 容器的网络默认与宿主机及其他容器之间是隔离的,但有时也需要与宿主机和容器进行通信。 容器间及容器与外部通信的需求 容器间通信&#xff1a;在Docker环境中&#xff0c;容器默认与宿主机及其他容器是相互隔离的。然而&#xff0c;在实际应用中&…

深入浅出 MyBatis | CRUD 操作、配置解析

3、CRUD 3.1 namespace namespace 中的包名要和 Dao/Mapper 接口的包名一致&#xff01; 比如将 UserDao 改名为 UserMapper 运行发现抱错&#xff0c;这是因为 UserMapper.xml 中没有同步更改 namespace 成功运行 给出 UserMapper 中的所有接口&#xff0c;接下来一一对…

UE5材质节点Panner

Panner节点可以让贴图动起来&#xff0c;快捷键是P&#xff0c;Speed的数值大小就是贴图移动的快慢&#xff0c;x和y是方向 这个节点可以用来做&#xff0c;传送带&#xff0c;护盾&#xff0c;河流&#xff0c;岩浆&#xff0c;瀑布等 制作岩浆流动效果 创建材质&#xff0c;…

Kimi进行学术方向选择精讲!

目录 1.文献搜索 2.辅助选题 3.选题判断 在我们之前的文章中&#xff0c;小编都强调了选题在文章价值中的核心作用。一篇优秀的文章背后&#xff0c;肯定有一个精心挑选的选题。选题的好坏直接影响着文章能够发表的期刊等级。许多宝子们却采取了相反的做法&#xff0c;将大量…

Google Veo AI 视频生成工具评测:AI视频生成的未来已来

近年来&#xff0c;AI技术的迅猛发展使得我们对虚拟现实的认知不断发生改变&#xff0c;尤其是在视频生成领域。Google 最新推出的 Veo AI 视频生成工具&#xff0c;无疑为这一领域带来了前所未有的突破。通过与其他知名工具如 OpenAI 的 Sora 进行对比&#xff0c;Veo 显示出令…

idea 8年使用整理

文章目录 前言idea 8年使用整理1. 覆盖application配置2. 启动的时候设置编辑空间大小&#xff0c;并忽略最大空间3. 查询类的关系4. 查看这个方法的引用关系5. 查看方法的调用关系5.1. 查看被调用关系5.2. 查看调用关系 6. 方法分隔线7. 选择快捷键类型8. 代码预览插件9. JReb…

3.微服务灰度发布落地实践(组件灰度增强)

文章目录 前言调用链示图dubbo服务之间的的调链cloud 服务之间的调用链 网关servlet容器: 标签续传1.定义插件2.实现灰度增强拦截 线程池: 标签续传1.拦截Runnable或Callable,接口增强实现标签续传;Callable 插件定义Runnable 插件定义拦载Callabl或Runnable构造(可共用)拦载ru…

java基础知识22 java的反射机制

一 java反射机制 1.1 概述 Java反射&#xff0c;程序在运行时&#xff0c;动态获取类信息&#xff08;类元数据&#xff09;&#xff0c;获取字段属性&#xff0c;动态创建对象和调用方法。Spring框架正是基于反射机制&#xff0c;通过我们的配置文件&#xff0c;在项目运行时…