TransactionTemplate自动注入,只看这一篇文章就够了

news2024/11/17 23:32:39

标准的springboot接入mybatis步骤
1.引入了对应的依赖包
2.应用的properties下增加相应配置
3.根据配置进行自动装配
一般我们会配置这些信息,主要包括三类 1.数据库的连接信息 2.指定的数据源类型 3.mybatis的配置信息

在这里插入图片描述

配完以后,当你启动SpringBoot的主类就会开始进行自动装配,主要出发点还是基于@SpringBootApplication组合注解里面的注解来做自动装配,但是本次简介核心只讲数据源装配的过程所以这里略过,装配核心就是各类XXXAutoConfiguration类,我们来看看数据源的装配过程。第一个核心类是org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration,这个是自动装配数据源的类,核心就是里面声明了一个静态的内部类org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration.Generic
这个静态内部类会基于@ConditionalOnProperty(name = “spring.datasource.type”)然后根据我们配置里面的com.alibaba.druid.pool.DruidDataSource来进行装配

在这里插入图片描述
这里其实就是通过反射创建出对应数据源的Class对象,然后再通过Class对象反射生成对应的实例
在这里插入图片描述

那么到这里,datasource数据源装配已经有了,接下来的就是关键的事务管理器与事务模板是在何处进行自动装配的,我们通常会在需要控制事务代码的地方这样来注入事务模板

在这里插入图片描述

但是大家有没有想过一个问题,这个template是谁来帮你注入的?他管理的究竟又是哪个数据源?带着这样的问题我们继续向下走。

最开始我其实有跟大家说过,自动装配其实无非就是各类XXXAutoConfiguration类,那么这里既然是事务,那一定是有一个叫TransactionalAutoConfiguration或者跟这个名字很相近的类,带着这个方向我们来找一下这个类

在这里插入图片描述

接下来我们看看这个类里面会做些什么,当你打开之后你就会看到,这样的一段代码,原来就是在这里进行了事务模板的装配

在这里插入图片描述

那么接下来又有一个问题了,我们知道用@bean定义的方法,如果方法参数有值,那么是需要从容器当中去寻找这样的一个bean的,那么下一个问题就出现了org.springframework.transaction.PlatformTransactionManager这个类又是何时被spring加到的容器当中的?

ok,继续回到灵感点,那么是否会有一个类似于叫TransactionManagerAutoConfiguration的类呢?带着这样的问题我们继续向下寻找,果不其然,确实是有一个跟这个名字很相近的类

在这里插入图片描述

打开一看,果然就是在这里注入的事务管理器,同时这个事务管理器的注入也需要一个dataSource的bean,这个回到我们开头,其实就已经跟大家说清楚了数据源是如何在哪里进行注入的,然后因为我们没有配置spring.dao.exceptiontranslation.enabled为false,所以这里注入的就是org.springframework.jdbc.support.JdbcTransactionManager,所以,当我们只是基于配置进行最简单的装配时,使用的transactionTemplate内嵌的事务管理器就是JdbcTransactionManager

在这里插入图片描述

那么到这里,我们已经说完了javax.sql.DataSource以及org.springframework.transaction.PlatformTransactionManager以及org.springframework.transaction.support.TransactionTemplate的自动装配了,所以我们才能在类中去注入对应的TransactionTemplate来做编程式事务的控制

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

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

相关文章

你是真的“C”——详解C语言数组模块知识

详解C语言数组模块知识😎前言🙌一维数组的创建和初始化🙌1.1 数组的创建💞1.2 数组的初始化💞1.3 一维数组的使用💞1.4 一维数组在内存中的存储💞二维数组的创建和初始化🙌1.1 二维数…

【Python百日进阶-数据分析】Day225 - plotly的Ohlc图go.Ohlc()

文章目录一、语法二、参数三、返回值四、实例4.1 简单的OHLC图4.2 隐藏滑块的OHLC图4.3 添加自定义文本和注释4.4 自定义OHLC颜色4.5 带日期时间对象的简单的OHLC图4.6 自定义悬浮文本4.7 Dash中的应用一、语法 ohlc(Open-High-Low-Close 的缩写)是一种…

【C++逆向】虚表(Virtual table)逆向 | 安卓so虚函数逆向

什么是多态 定义一个虚基类ISpeaker class ISpeaker{ protected:size_t b; public:ISpeaker( size_t _v ): b(_v) {}virtual void speak() 0; };有两个子类,都实现了虚函数speak(): class Dog : public ISpeaker { public:Dog(): ISpeaker(0){}//vir…

1581_AURIX_TC275_SMU故障处理梳理

全部学习汇总: GreyZhang/g_TC275: happy hacking for TC275! (github.com) 前面为了缓解自己的学习压力,一次学习笔记大概也就是看10页文档整理一下。这一次其实是看了几十页,但是里面过掉了一些信息,而且这部分内容不是很好拆分…

hive在IDEA中debug

一、hive在IDEA中debug 安装hadoop环境(1和2替换顺序也可以) 注:hadoop环境不需要从源码编译 https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-common/SingleCluster.html 按照官网教程编译源码 https://cwiki.apach…

软件工程专业课实验报告

一、结构化分析方法1.1需求描述教务管理子系统的需求描述:教务管理是一项需求周密计划、严谨安排的工作,要依据教师、学生信息进行合理安排。开学阶段,需要教师提交开课申请进行开课,学生根据老师的开课信息,选择课程&…

uview 使用遇到的问题。

uviewuniappvue,uView是uni-app生态专用的UI框架。 1. 注意uview版本,uview 2.0与uview1.0 官方提示:uView2.0是继1.0以来的一次重大更新,2.0已全面兼容nvue。 因此在接手项目的时候首先得看清楚,之前开发的是uview…

【自学Python】Python获取字符串长度

Python获取字符串长度 Python获取字符串长度教程 在 Python 中要想获取 字符串 长度可以使用 len() 函数。 Python len()函数详解 定义 我们将要获取的字符串的长度,传进 len() 函数,即可实现获取字符串的长度。 语法 len(string)参数 参数描述s…

【7】K8s_Ingress | Service的统一网关入口

目录 1、Ingress简介 2、安装ingress 【1】制作ingress.yaml文件并执行 【2】测试,创建一个test.yaml文件并执行 【3】设置域名访问,用yaml文件 【4】路径重写 【5】流量限制 1、Ingress简介 Ingress: Service的统一网关入口是k8s中的一个api对象&…

时序数据库TDengine基本概念和建模思路

目录 一 、 时序数据库基本概念 采集量 标签 数据采集点 表 超级表 子表 库 二、 TDengine数据库建模策略 建表模式建表情形 行列数据库存储的区别: 接触的传统业务的数据模式都是行存储,我们会把不同类型的对象创建不同的表进行存储他们各自的属…

机器学习公式推导与代码实现-无监督学习模型

聚类分析与k均值聚类算法 督学习算法。在给定样本的情况下,聚类分析通过度量特征相似度或者距离,将样本自动划分为若干类别。 距离度量和相似度度量方式 距离度量和相似度度量是聚类分析的核心概念,大多数聚类算法建立在距离度量之上。常用的距离度量方式包括闵氏距离和马…

linux系统中使用QT来实现数据库的调用方法

大家好,今天主要和大家分享一下,如何使用QT中数据库的使用方法。 目录 第一:数据库基本简介 第二:数据库表格基本操作 第三:数据库最终效果 第一:数据库基本简介 数据库是按照数据结构来组织,…

视频目标检测与轨迹跟踪代码案例

前言通过阅读相关文献及测试,找到了一种基于多模板匹配的改进方法,可以对遥感视频卫星中的移动目标进行探测,并绘制其轨迹。根据实验结果发现,可以比较有效的对运动目标进行跟踪。一、原理核心思想比较简单。即通过不同旋转角度的…

AQS之ReentrantLock详解

非公平锁加锁过程一般我们在使用ReentrantLock的时候,代码如下:Test public void test(){ReentrantLock lock new ReentrantLock();lock.lock();try{//编写业务逻辑}catch (Exception e){lock.unlock();} }当我们在用ReentrantLock独占锁的时候&#xf…

current并发包

并发包 current并发包、在JDK1.5之前Java并没有提供线程安全的一些工具类去操作多线程,需要开发人员自行编写实现线程安全,但仍然无法完全避免低性能、死锁、资源管理等问题。在JDK1.5时新增了java.util.current并发包,其中提供了许多供我们…

【自学Python】Python截取字符串

Python截取字符串 Python截取字符串教程 在 Python 中,我们需要截取 字符串,不需要使用特定的 函数,只需要使用下标索引加上切片的形式,就可以实现字符串的截取。 Python字符 Python 中没有单个字符的概念,单个字符…

uni-app 微信小程序通过Vue3 Hooks 实现动态填充页面剩余高度

应用场景 在uni-app开发微信小程序等项目时,经常会遇到这样的页面布局需求:上半部分高度固定,下半部分自动占满剩余高度,如下图所示应用场景:上半部分为固定高度或内容填充高度的内容区域下半部分为scroll-view滑动区…

河北稳控科技振弦采集模块配置工具VMTool的常见功能

河北稳控科技振弦采集模块配置工具VMTool的常见功能 一、实时数据读取 当 VMTool 与模块为连接状态时( 4.3.1 模块的连接与断开), 勾选实时数据区的【 自动读取】 复选框, VMTool 开始自动向模块发送实时数据读取指令&#xff0c…

如何用 Java 来构建一个简单的速率限制器?

速率限制 现实世界中的用户是残暴的,并且没耐心,充满着各种不确定性。在高并发系统中,可能会出现服务器被虚假请求轰炸的情况,因此您可能希望控制这种情况。 一些实际使用情形可能如下所示: API配额管理-作为提供者…

28.函数指针变量作为函数的参数,容易混淆的指针概念,特殊指针,main函数传参

1.函数指针变量作为函数的参数 #include<stdio.h> int add(int x, int y) {return x y; } int sub(int x, int y) {return x - y; } int mux(int x, int y) {return x * y; } int dive(int x, int y) {return x / y; } int process(int(*p)(int, int),int x,int y) {in…