Spring源码(一) — 序言

序言

Java程序员的日常开发一定都离不开Spring的框架,从Spring、SpringMVC、SpringBoot、SpringCloud…
而Spring框架就是Spring家族中最基础也是最重要的一个框架。

Spring

我们常说的Spring往往都绕不开IOC(控制反转)和AOP(切面),其中IOC容器又会帮助我们来管理Java bean,不需要再通过new的方式创建对象,只需要在使用时,在容器中拿即可获得。
在这里插入图片描述
而对Spring的使用,基本都是从application-context.xml开始的,xml中的每个bean标签都代表着每个Java的Bean对象,在Bean标签中配置对应的属性,并通过ac来获取具体的Bean对象,那如果在xml中没有配置Bean的信息,在ApplicationContext中也是一定获取不到的。
在这里插入图片描述
和Mybatis的步骤相似,从xml到从ac中获取,大体步骤分为以下几步:
在这里插入图片描述
Spring中,通过反射来进行对类的创建,避免了new的操作,因为反射照比new操作来讲,更加的灵活,可以获取到对象更多的属性、注解等,并且Spring创建的Bean默认是单例的。
在这里插入图片描述

IOC容器

IOC容器负责Spring的Bean管理,从配置文件中获取到Bean和对应的属性,Spring为了方便后续的扩展和预定规范,提供了BeanDefinitionReader来进行规范和扩展。并将xml等配置文件解析成beanDefinition。
在这里插入图片描述
在这里插入图片描述
通过beanDefinition来生成Bean的实例化对象,那在程序运行的过程中,如果想要动态修改Bean的定义信息,该怎么办?比如说:

<property name = url value =${jdbc.url}>

在读取xml文件时,占位符中的信息都是要根据具体值进行替换的。 如果想随时修改beanDefinition该怎么办?
在这里插入图片描述
通过PostProcessor增强器,可以修改Bean的范围、懒加载等。

再回到beanDefinition实例化对象的过程,我们一般说的实例化,其实就是new对象,创建对象的一个过程,而在Spring(JVM)中,实例化是指在堆中开辟空间,对象属性设置默认值。而初始化是填充对象属性,执行init-method方法等。
在这里插入图片描述
Spring在创建完整对象的过程中,只是在上面图的基础上进行了更完整的填充。
在这里插入图片描述
以上就是关于Spring的简介,图中流程也只是大体流程,在Spring运行的过程中,还会有更多的细节会进行完善,这些细节也会在之后的文章中进行完善。

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

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

相关文章

【TellMeCode】使用VSCODE + ChatGPT辅助分析推测源码

【TellMeCode】使用VSCODE ChatGPT辅助分析推测源码 0x00 功能简介 根据代码上下文相关信息&#xff0c;如工作区文件夹名称&#xff0c;代码所在路径等一系列信息&#xff0c;提供给大模型更多元和尽可能多的信息&#xff0c;利用其自身优势去检索相关的文档和博客&#xf…

QT开发实战-动态壁纸软件

动态壁纸软件开发 项目源代码在下面链接获取: ----------------------------- 开发者:CodeSharkSJ 希望此项目能加强你对Qt的应用 文章目录 项目图与开发环境核心技术原理自定义窗口程序UI布局背景绘制样式表基本实现QWebEngineQMedia使用系统托盘隐藏记忆功能应用程序打包 …

RestCloud荣膺广东省优秀软件产品奖,引领国内数据集成领域!

近日&#xff0c;“2022年广东软件风云榜”名单公布&#xff0c;“谷云ETL数据交换软件”凭借其在助力企业数字化转型升级过程中的卓越表现&#xff0c;荣获由羊城晚报报业集团、广东软件行业协会、广东省大数据协会联合颁发的“优秀软件产品和解决方案”奖。 数字化转型是推动…

【P38】JMeter 随机控制器(Random Controller)

文章目录 一、随机控制器&#xff08;Random Controller&#xff09;参数说明二、测试计划设计2.1、测试计划一2.2、测试计划二2.3、勾选忽略子控制器块 一、随机控制器&#xff08;Random Controller&#xff09;参数说明 可以让控制器内部的逻辑随机执行一个&#xff0c;一般…

深度学习-第T8周——猫狗识别

深度学习-第T8周——猫狗识别 深度学习-第T8周——猫狗识别一、前言二、我的环境三、前期工作1、导入数据集2、查看图片数目 四、数据预处理1、 加载数据1.1、设置图片格式1.2、划分训练集1.3、划分验证集1.4、查看标签1.5、再次检查数据1.6、配置数据集 2、数据可视化 五、搭建…

机器学习常识 7: 决策树

摘要: 决策树是一种与人类思维一致, 可解释的模型. 1. 决策树的结构 人类的很多知识以决策规则的形式存储: 如果今天是阴天 (outlook overcast), 就去打球.如果今天出太阳 (outlook sunny) 而且湿度不高于 70% (humidity ≤ \le ≤ 70), 就去打球.如果今天出太阳 (outloo…

1688商品ID采集一件代发详情页面数据

本篇博文介绍了对1688商品详情API的二次封装&#xff0c;将URL参数封装成Python函数&#xff0c;直接传入参数即可获取搜索结果&#xff0c;例如1688商品标题、价格、一件代发、sku属性和URL等。提供了详细的代码示例和接口调用Demo。 1688.item_get-获得1688商品详情数据 1.请…

APP开发死亡潮来临 小程序是否会取而代之?

移动互联网的发展&#xff0c; APP开发行业也迎来了它的大时代。据有关数据显示&#xff0c;2017年上半年国内新增的 App数量达到了创纪录的449万款&#xff0c;用户使用时长超过了200亿分钟。移动互联网已成为名副其实的“流量”产业&#xff0c;也因此诞生出一大批 APP开发公…

Maven 概述及下载安装

一、为什么要学习 Maven 我们构建一个项目需要用到很多第三方的类库&#xff0c;就需要引入大量的jar包&#xff0c;并且Jar包之间的关系错综复杂&#xff0c;缺少任何一个Jar包都会导致项目编译失败。Maven 能帮助我们下载及管理依赖。 本地项目代码开发完成后&#xff0c;我…

类和对象【3】初始化列表

全文目录 引言初始化列表定义特性 总结 引言 上一篇文章中介绍了构造函数&#xff0c;它可以在实例化一个类对象的时候自动调用&#xff0c;以初始化类对象&#xff1a; 戳我看默认成员函数详解 但是&#xff0c;不难发现&#xff0c;在构造函数体中对成员变量的初始化其实是属…

gdb调试 与 coredump

gdb调试 与 coredump调试 1. 启动gdb2.gdb中的相关命令3. coredump调试&#xff08;附属于gdb调试中一种&#xff0c;当程序出现错误时&#xff0c;会使用coredump调试&#xff09;1&#xff09;coredump是什么&#xff1f;2&#xff09;前期设置3&#xff09;什么情况下会导致…

word打印为pdf去掉批注和修订记录

对于这个问题某乎上充斥着垃圾回答&#xff0c;大多引流到自家开发的pdf产品上。其实背后的方法都是一样的&#xff0c;就是关掉批注&#xff0c;用word自带的功能就能解决&#xff0c;凡是word编辑软件都有类似功能 直接用word打印为pdf后的效果 下图为打印出来的pdf文件&…

【算法】不使用LinkedHashMap实现一个LRU缓存

文章目录 什么是LRU&#xff1f;设计思路代码实现 LRU是我在面试过程中遇到的比较多的算法题了&#xff0c;并且我自己的项目中也手写了LRU算法&#xff0c;所以觉得还是有必要掌握一下这个重要的算法的。 什么是LRU&#xff1f; LRU是一种缓存淘汰策略。 我们知道&#xff0…

大环境不好难找工作?三面阿里,幸好做足了准备,已拿offer

大环境不好难找工作&#xff1f;三面阿里&#xff0c;幸好做足了准备&#xff0c;已拿offer 三面大概九十分钟&#xff0c;问的东西很全面&#xff0c;需要做充足准备&#xff0c;就是除了概念以外问的有点懵逼了&#xff08;呜呜呜&#xff09;。回来之后把这些题目做了一个分…

R-Meta分析与【文献计量分析、贝叶斯、机器学习等】多技术融合实践与拓展

Meta分析是针对某一科研问题&#xff0c;根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法&#xff0c;对来源不同的研究成果进行收集、合并及定量统计分析的方法&#xff0c;最早出现于“循证医学”&#xff0c;现已广泛应用于农林生态&#xff0c;资源环境等方面。…

增强型本地文件搜索工具:Find Any File

Find Any File是mac上一款增强型本地文件搜索工具&#xff0c;可以让你在本地磁盘上搜索、查找任何文件&#xff0c;包括本地磁盘的名称、 创建或修改日期、 大小或类型和创建者代码等。小编现为大家提供最新Find Any File Mac破解版&#xff0c;欢迎需要的朋友下载使用。 Find…

屏幕挂灯是不是智商税?明基ScreenBar Halo屏幕挂灯初体验

目录 一、屏幕挂灯是不是智商税&#xff1f;二、文心一言眼里的屏幕挂灯1、明基ScreenBar Halo屏幕挂灯2、屏幕挂灯和普通台灯哪个好&#xff1f; 三、屏幕挂灯初体验四、使用体验五、无线控制器六、专业角度分析1、屏幕工作照明&#xff0c;不是随便一盏灯就可以2、引导光线照…

路径规划算法:基于入侵杂草优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于入侵杂草优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于入侵杂草优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化…

【SA8295P 源码分析】03 - SA8295P QNX Host 上电开机流程分析

【SA8295P 源码分析】03 - SA8295P QNX Host上电开机流程分析 一、阶段1 固件开机自检 (SM BIST)&#xff1a;APPS PBL加载XBL后触发 INT_RESET进行Warm Reset二、阶段2 固件开机自检 (SM BIST)&#xff1a;加载TZ&#xff0c;初始Hypervisor&#xff0c;启动QNX Kernel&#x…

Flume实践

1 NetCat方式 ]# ./bin/flume-ng agent --conf conf--conf-file ./conf/flume_netcat.conf --name a1 -Dflume.root.loggerINFO,console [rootmaster ~]# yum -y intalll telnet 发数据&#xff1a; ]# telnet master 44444 数据接收&#xff0c;是在终端上接收的&#xff0…