spring 没完没了

start

     轻量级开源的j2ee框架,容器框架 装javabean aop ioc

     定义一个starter的jar包,写一个configuration配置类,将bean定义其中,在starter包的meta-inf/spring.factories中写入配置类,springboot会按约定加载该配置类

ioc:重中之重

配置文件配置包扫描路径 获取class文件 反射确定需要ioc管理的类 对需要注入的类依赖注入

   定义一些注解,控制层  业务层 数据持久层 依赖注入注解 获取配置文件  

   获取指定路径下的文件信息及文件夹信息,class文件添加到set集合

   遍历集合 获取指定注解的类 交给ioc,安全的map存储对象

   遍历ioc容器 获取类实例 判断是否依赖其他类实例 递归注入

ioc容器实际map,存各种对象,反射创建对象放入map中

    代码需要用到里面的对象,通过类型/🆔(对象名)注入;没有对象伤不起

控制反转:需要对象时IOC主动创建/使用 对象

依赖注入:IOC容器运行期间 ,动态将某种依赖关系注入到对象中

加载

    spring框框干活,一干一个不吱声

ioc容器:读取配置信息 实例化 管理对象

bean定义:描述 配置要管理的对象,对象类名 属性 依赖关系

bean工厂:实例化 配置管理对象,读取bean定义 据定义创建 初始化bean对象 放入ioc容器

生命周期:尊重生命 热爱生活

上图 虽然一张图胜过千言万语 但是我画的也不是图 死板的流程图罢了

启动流程

作用域

单例singleton:每个容器一个bean实例,beanFactory维护 

prototype原型:每次请求都注入新的实例

request:http请求创建一个单例对象

session:每个session中有个bean实例

application:servletContext生命周期中复用单例对象

websocket:定义在websocket生命周期的

global全局

设计模式:低耦合两个字yyds

工厂beanFactory/factoryBean

适配器advisorAdapter

访问者propertyAccessor

装饰器beanWrapper

代理aop

观察者事件监听

策略instantiationStrategy

模板jdbcTemplate

委派beanDefinitionParseDefenate

责任链beanPostProcessor

aop:这块嘎嘎🦆厉害

CGLIB通过创建目标类的子类来代理原始对象,并在子类中添加增强处理

    代理类class文件加载 修改字节码生成子类 

jdk基于接口 proxy类 被代理对象注入到中间对象

中间对象实现invocationHandler接口(拦截器 反射 代理接口匿名类)

newProxyInstance利用中间对象来生产代理对象

事务:

数据库事务和aop机制

@Transactional注解bean创建代理对象作为bean

调用代理对象方法先判断方法上是否加了Transactional注解

   如果咱就说如果加了  利用事务管理器 创建数据库连接 autocommit=false

spring事务传播机制是spring自己实现的,基于数据库连接做的

    一个数据库连接一个事务,这句话挺重要的!新开一个事务 先建连接再执行sql

   事务创建/提交/回滚通过transactionInterceptor切面完成,据事务管理器和属性自动管理

platformTransactionManager实现

    dataSourceTransactionManager:jdbc和mybatis的

    jtaTransctionManager:分布式事务 xa接口 多资源事务管理

   spring事务核心 transactionDefinition定义属性(隔离级别/传播行为/超时/只读)和transactionStatus(是否新事物/是否标记为回滚)

失效

私有方法 / 未被spring管理 /方法用final修饰/方法内部调用/未开启事务

传播属性

propagation_required 当前则没有新建,有则加入,默认

propagationrequiresnew 当前存在挂起 新建事务(和挂起的无关) 内抛异常外层捕获可不处理

propagation_supports支持当前事务,无事务 非事务方式执行

propagation_mandatory支持当前事务 没有抛异常

propagationnotsupported以非事务方式操作 当前存在则挂起

propagation_never非事务方式执行,存在事务抛异常

propagation_nested活动事务存在 运行一个嵌套事务中,无required执行使用单独事务,使用独立事务,拥有多个回滚的保存点,内部事务的回滚不会对外部事务造成影响,只对datasourceTransactionManager事务管理器有效

循环依赖

三级缓存

lazy解决构造方法造成的循环依赖问题

一级缓存 初始化的单例对象 singletonObjects

二级earlySingletonObjects缓存保存new出来的不完整对象,当单例池中找不到依赖的属性时,先从二级缓存中获取不完整对象,完成对象创建,后续依赖注入中 单例池中对象引用关系调整完成

三级缓存singletonFactories,引用对象配置了aop,单例池中最终会需要注入动态代理对象(对象初始化之后才开始),非原对象,保存所有对象的动态代理配置信息,发现有循环依赖时 获取代理对象 提前aop

后置处理器

       beanFactory后置处理器BeanFactoryPostProcessor,spring启动先创建beanFactory实例 实例化所有bean后 依赖注入前,后置处理器加工beanFactory,spring扫描基于beanFactory实现

       bean后置处理器BeanPostProcessor,先实例对象,bean后置处理器对该对象加工,依赖注入给autowired自动赋值,aop基于原实例对象进行动态代理,生成代理对象

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

3D模型优化服务+三维可视化+数字孪生+元宇宙=眸瑞科技

眸瑞科技:老子云平台AMRT3D数字孪生引擎 老子云概述 老子云3D可视化快速开发平台,集云压缩、云烘焙、云存储云展示于一体,使3D模型资源自动输出至移动端PC端、Web端,能在多设备、全平台进行展示和交互,是全球领先、自…

【Flask开发实战】防火墙配置文件解析(二)之shell读取内容

一、前言 上一篇文章中,介绍了防火墙配置文件包含的基本元素和格式样式,并模拟了几组有代表性的规则内容,作为基础测试数据。在拿到基础测试数据后,关于我们最终想解析成的数据是什么样式的,其实不难看出,…

gitlab仓库使用流程(开发)

1.1.GitLab代码提交流程: 1.1.1准备阶段: 确保已经安装了Git,并且配置了正确的用户名和邮箱地址。 在本地创建一个新的文件夹,用于存放即将开发的代码。 1.1.2.拉取代码: 使用git clone命令从GitLab上拉取项目代码…

day05vue学习

day05 一、学习目标 1.自定义指令 基本语法(全局、局部注册)指令的值v-loading的指令封装 2.插槽 默认插槽具名插槽作用域插槽 3.综合案例:商品列表 MyTag组件封装MyTable组件封装 4.路由入门 单页应用程序路由VueRouter的基本使用 …

学习网络编程No.14【数据链路层ARP理解】

引言: 北京时间:2024/3/14/9:20,简单聊一聊我的日常。昨天晚上十点左右更新完新的一篇文章,回到宿舍简简单单花了个两首歌的时间洗了个澡,然后为了保持形象吹了个头发,哈哈哈!当然对比以前的我…

[Labtools 27-1429] XML parser encountered a problem in file

平台:Vivado2108.3 最近在使用vivado的debug过程中发现,编译好工程后打开open hardware manager出现如下错误。 [Labtools 27-1429] XML parser encountered a problem in file E:/githome/xxxx/hw_1/hw.xml at line 1 : XML character encoding not su…

关系数据库标准语言SQL

1.SQL概述 1.1基本表(Base table) 实际存储在数据库中的表SQL中一个关系就对应一个基本表基本表可以有若干个索引基本表的集合组成关系模式,即全局概念模式(数据的整体逻辑结构) 1.2 存储文件 存储文件和相关索引组…

蓝桥杯刷题总结(Python组)

1、蛇形矩阵 解题思路:每次赋值后都对方向进行改变,一般上下左右就是(-1,0),(0,1),(1,0),(0&…

21.环形链表

给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(…

【sql】深入理解 mysql的EXISTS 语法

相关文章: 【sql】深入理解 mysql的EXISTS 语法 【sql】初识 where EXISTS 1. 使用格式如下: select * from a where exists ( 任何子查询 ) 代码根据颜色分成两段,前面的是主查询,后面红色的是子查询,先主后子&…

Linux(Ubuntu)下安装paddleocr详细教程

PaddleOCR旨在打造一套丰富、领先、且实用的OCR工具库,助力开发者训练出更好的模型,并应用落地。 1、 Ubuntu安装教程: 首先安装paddlepaddle:pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple 一般此项不会报错…

交叉注意力融合时空特征的TCN-Transformer并行预测模型

独家 | 高创新预测模型 往期精彩内容: 时序预测:LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较-CSDN博客 风速预测(一)数据集介绍和预处理-CSDN博客 风速预测(二)基于Pytorch的EMD-LSTM模型-CSDN博…

IDEA上的Scala环境搭建

Scala环境搭建 一、搭建Scala开发环境 安装Scala编译器 安装scala-2.12.10.msi(详见【我的资源】) 检查scala安装情况 在dos窗口输入scala,检查是否能够进入编译器。进行简单的scala命令计算 在IDEA中进行scala编码 File - Settings - …

智能风暴:如何码垛协作机器人正在重塑日用品生产?

在日用品行业中,码垛工作一直是一项劳动强度大、重复性高的工作。如今,随着科技的发展,码垛协作机器人的出现,正在给这一行业带来革命性的改变。 以往,工人们在炎热或寒冷的环境下,搬运、堆叠着各种日用品&…

redis-黑马点评-商户查询缓存

缓存:cache public Result queryById(Long id) {//根据id在redis中查询数据String s redisTemplate.opsForValue().get(CACHE_SHOP_KEY id);//判断是否存在if (!StrUtil.isBlank(s)) {//将字符串转为bean//存在,直接返回Shop shop JSONUtil.toBean(s, …

零基础如何学习Web 安全,如何让普通人快速入门网络安全?、

前言 网络安全现在是朝阳行业,缺口是很大。不过网络安全行业就是需要技术很多的人达不到企业要求才导致人才缺口大 初级的现在有很多的运维人员转网络安全,初级也会慢慢的卷起来,但是岗位多不用怕,以后各大厂也都会要网络安全人…

【linux】CentOS查看系统信息

一、查看版本号 在CentOS中,可以通过多种方法来查看版本号。以下是几种常用的方法: 使用cat命令查看/etc/centos-release文件: CentOS的版本信息存储在/etc/centos-release文件中。可以使用cat命令来显示该文件的内容,从而获得C…

传输大咖15|如何在 PC 客户端中集成镭速高速传输插件?

引言 在当前信息爆炸的时代,快速、安全、稳定地传输数据对于企业的日常运营至关重要。然而,传统的 FTP/HTTP 传输方式存在着传输速度慢、易受网络延时、丢包等问题。而镭速高速传输插件可以帮助企业轻松实现快速、安全的文件传输。本文将详细介绍如何在…

基于Spring Boot的云上水果超市的设计与实现

摘 要 伴随着我国社会的发展,人民生活质量日益提高。于是对云上水果超市进行规范而严格是十分有必要的,所以许许多多的信息管理系统应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套云上水果超市,帮助商家进行…

王老吉药业开拓数字经济“新蓝海”,成立数字经济研究所,科技赋能新品压片糖

3月12日,广州王老吉药业股份有限公司(以下简称“王老吉药业”)召开第十一届312感恩活动新闻发布会,宣告王老吉数字经济研究所成立,并发布王老吉压片糖新品。一系列重要重要举措,无一不标志着王老吉药业正以…
最新文章