spring 没完没了

news2024/9/21 0:30:33

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.coloradmin.cn/o/1527893.html

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

相关文章

蓝桥杯-体育健将-CPP-贪心

目录 一、题目描述: 二、整体思路: 三、代码: 一、题目描述: 二、整体思路: 要在k分钟内拿最多的金牌,就意味着要参加尽可能多的项目,因此就要选择耗时(比赛时间和休息时间)最少的项目先预处…

QT6实现创建与操作sqlite数据库(一)

一.Qt为SQL数据库提供支持的基本模块(Qt SQL) Qt SQL的API分为不同层: 驱动层 SQL API层 用户接口层 1.驱动层 对于Qt 是基于C来实现的框架,该层主要包括QSqlDriver,QSqlDriverCreator,QSqlDriverCreatorBase,QSqlPlug…

笔记本固态硬盘损坏数据恢复两种方法 笔记本固态硬盘损坏如何恢复

大家好!今天要跟大家分享的是笔记本固态硬盘损坏数据恢复的两种方法。相信很多小伙伴都遇到过这种情况,电脑突然蓝屏或者死机,再开机后发现自己的数据不见了,这时候该怎么办呢?这可真是让人头疼。毕竟,我们的数据都在里面呢!别着急,我来给大家支招!今天就来给大家介绍…

Linux初识环境变量

🌎环境变量【上】 文章目录: 环境变量 什么是环境变量 关于命令行参数 环境变量       简单了解       为什么需要环境变量       系统中其他环境变量 总结 前言: 环境变量是一种非常重要的概念,它们对于系统的…

鸿蒙Harmony应用开发—ArkTS声明式开发(绘制组件:Path)

路径绘制组件,根据绘制路径生成封闭的自定义形状。 说明: 该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 无 接口 Path(value?: { width?: number | string; height?: number |…

OpenResty使用Lua大全(九)实战:nginx-lua-redis实现访问频率控制

文章目录 系列文章索引一、需求背景二、设计方案1、预期结果2、nginx.conf配置3、access_by_limit_frequency.lua4、测试 系列文章索引 OpenResty使用Lua大全(一)Lua语法入门实战 OpenResty使用Lua大全(二)在OpenResty中使用Lua …

Django 反向解析路由

app2.urls.py from django.urls import path, re_path from . import viewsurlpatterns [path(index, views.index, nameindex),path(url_reverse, views.url_reverse, nameapp2_url_reverse), # 使用reverse()方法反向解析 ,name对于视图的reverse("app2_url_reverse&…

鼎阳SDS6204示波器EPICS IOC的搭建

三年前曾写过这个文: 鼎阳SDS6204示波器的EPICS IOC调试 文章里有EPICS网站设备IOC搭建的指南,具体搭建IOC的步骤就没详细写了,几年后重新搭建时发现还是费了些力气才搭建起来,因此写此文记录下手把手的过程方便自己以及EPICS的初…

阿里云云服务器ECS端口多个端口号开通教程

阿里云云服务器ECS端口多个端口号开通教程 1、登录到ECS云服务器管理控制台 2、左侧栏找到【实例与镜像】>>【实例】,找到目标ECS实例,点击实例ID进入到实例详情页 3、切换到【安全组】页面,点击右侧【配置规则】,如下图&…

Mysql与MyBatis

1 Sql语句 增删改查 1.1 建表 -- cmd展示数据库 show databases ; -- cmd登录数据库 mysql localhost -u root -p-- auto_increment 自动增长,每添加一个表项id自动增1 -- char定长字符串 0-255,不足十个字符按十个字符算, varchar变长字符串…

[LLM]大语言模型文本生成—解码策略(Top-k Top-p Temperature)

{"top_k": 5,"temperature": 0.8,"num_beams": 1,"top_p": 0.75,"repetition_penalty": 1.5,"max_tokens": 30000,"message": [{"content": "你好","role": "user&…

【深度学习】手动实现全连接神经网络(FCNN)

🌻个人主页:相洋同学 🥇学习在于行动、总结和坚持,共勉! 神经网络的本质就是通过参数、线性函数与激活函数来拟合特征与目标之间的真实函数关系。 01 神经网络简介 1.1 引入 神经网络是一门重要的机器学习技术&…

hosts文件丢失了怎么办?

hosts文件的位置:C:\Windows\System32\drivers\etc 丢失了恢复的方法: 在“管理员:命令提示符中输入: (winR 然后cmd) for /f %P in (dir %windir%\WinSxS\hosts /b /s) do copy %P %windir%\System32\d…

SAP前台处理:物料主数据创建<MM01>之采购视图

一、背景: 终于来到了物料主数据,我觉得物料账是SAP最重要的一项发明,也一直是SAP的一项重要优势,物料账记录了一个个物料的生生不息; 本章主要讲解物料主数据和财务相关的主要内容:这里特别提示由于作者…

SpringMVC | SpringMVC中的“JSON数据交互“ 和“RESTful支持“

目录: 1.JSON 数据交互1.1 JSON概述1.2 JSON的“数据结构”对象结构数组结构 1.3 JSON的“数据转换” (JSON交互) 作者简介 :一只大皮卡丘,计算机专业学生,正在努力学习、努力敲代码中! 让我们一起继续努力学习! 该文章参考学习教…

二、C#选择排序算法

简介 选择排序算法的基本思想是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列…

【目标检测经典算法】R-CNN、Fast R-CNN和Faster R-CNN详解系列三:Faster R-CNN图文详解

【目标检测经典算法】R-CNN、Fast R-CNN和Faster R-CNN详解系列二:Fast R-CNN图文详解 概念预设 感受野 感受野(Receptive Field) 是指特征图上的某个点能看到的输入图像的区域。 神经元感受野的值越大表示其能接触到的原始图像范围就越大,也意味着它…

工业AMR机器人如何实现规模化的柔性生产

在当下高度复杂的工业生产环境中,机器人如何实现规模化的柔性生产,已成为业界关注的焦点。特别是在追求高效率、高质量的生产过程中,团队协作的重要性愈发凸显。富唯智能一体化AMR控制系统,作为机器人的核心指挥部,犹如…