Spring原码学习第一篇:Spring源码概述

news2024/12/23 22:28:40

1、Spring获取对象的过程

在这里插入图片描述

2、Spring源码概述图:

在这里插入图片描述

2、一些重要的接口

在这里插入图片描述

BeanDefinition中实现的方法,把xml中定义的对象封装为一个对象,方便后面处理
在这里插入图片描述

4、BeandefinitionReader

BeandefinitionReader作为一个抽象层来处理配置文件,定义规范,方面扩展,如果再有其他格式的配置文件的话,直接实现该接口即可。

在这里插入图片描述
在这里插入图片描述

5、BeanFactory接口

BeanFactory是访问Spring Bean的根接口

BeanFactory
Bean工厂,整个容器的根接口,也是容器的入口
Construct ctor = clazz.getConstructor();
Object obj = ctor.newInstance()

在这里插入图片描述
这几个接口要特别注意
在这里插入图片描述

6、 BeanFactoryPostProcessor登场

在容器创建过程中需要动态的改变bean的信息怎么办?
例如:<property name = url value = ${jdbc.url}
如果想要随时修改beanDeifinition怎么办?
答案:用 BeanFactoryPostProcessor

例如PlaceholderConfigurerSupport类如下:
在这里插入图片描述
自己实现BeanFactoryPostProcessor方法如下:
在这里插入图片描述
在这里插入图片描述
把beanDefinition信息修改完之后,就可以用反射进行实例化操作了。创建对象分为实例化和初始化。如下:
在这里插入图片描述

7、 设置Aware接口属性

Aware接口是什么作用?
当Spring容器创建的bean对象在进行具体操作的时候,如果需要容器中的其他对象,此时可以将对象实现Aware接口,来满足需要
在这里插入图片描述
在这里插入图片描述

8、 BeanPostProcessor:before、BeanPostProcessor:after 后置增强处理器

在这里插入图片描述

9、 对象的分类

对象分为两类:一类是普通对象,一类是容器对象
在这里插入图片描述
Spring需要的对象举例:
在这里插入图片描述
Bean 工厂实现应尽可能支持标准 Bean 生命周期接口。全套初始化方法及其标准顺序为:
在这里插入图片描述
在不同的阶段要处理不同的工作,应该怎么办?
观察者模式:监听器,监听事件,多播器(广播器)

10、 BeanFactory 和FactoryBean的区别

都是用来创建对象的;
当使用BeanFactory的时候必须要遵循完整的创建过程,这个过程是由Spring来管理控制的;
而使用FactoryBean只需要调用getObject就可以返回具体的对象,整个对象的创建过程是由用户自己来控制的,更加灵活。

在这里插入图片描述

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

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

相关文章

Autosar通信实战系列01-CanSM模块功能及配置开发详解

本文框架 前言1. CanSM General配置2. 通道详细配置解析2.1 添加一路CanSMController2.2 CanSMController配置2.3 关联DemEvent配置前言 在本系列笔者将结合工作中对通信实战部分的应用经验进一步介绍常用,包括但不限于通信各模块的开发教程,代码逻辑分析,调测试方法及典型…

【Maven二】——maven仓库

系列文章目录 Maven之POM介绍 maven命令上传jar包到nexus maven仓库 系列文章目录前言一、什么是maven仓库&#xff1f;二、仓库的分类建立私服的优势 三、远程仓库的配置四、远程仓库的认证部署至远程仓库五、快照版本&why六、从仓库解析依赖的机制七、镜像总结 前言 由…

习题—实用类

目录 1.xxx 1.包装类及其构造方法 import java.util.List; import java.util.ArrayList; import java.util.Scanner;//包装类及其构造方法 public class Test {public static void main(String[] args) {// 装箱&#xff1a;基本类型转换为包装类的对象 // 拆箱&#xff1a…

go mod verdor简明介绍

Go 语言在 go 1.6 版本以后编译 go 代码会优先从 vendor 目录先寻找依赖包&#xff0c;它具有以下优点&#xff1a; 复制依赖&#xff1a;go mod vendor 会把程序所依赖的所有包复制到项目目录下的vendor 文件夹中&#xff0c;所以即使这些依赖包在外部源&#xff08;如 GitHu…

「C/C++」C/C++宏定义#define

✨博客主页&#xff1a;何曾参静谧的博客 &#x1f4cc;文章专栏&#xff1a;「C/C」C/C程序设计 目录 术语说明宏定义 #define定义常量定义函数定义代码块常用标识符用宏包含头文件 术语说明 定义宏是一种预处理器指令&#xff0c;它可以将一些代码片段或者常量直接替换为另一…

刘二大人Pytorch课程笔记

Lecture01. Overview 没啥好记的&#xff0c;理解就好 人工智能和机器学习等的关系&#xff1a; 正向传播 正向传播本质上是按照输入层到输出层的顺序&#xff0c;求解并保存网络中的中间变量本身。 反向传播 反向传播本质上是按照输出层到输入层的顺序&#xff0c;求解并…

LangChain 联合创始人下场揭秘:如何用 LangChain 和向量数据库搞定语义搜索?

近期&#xff0c;关于 ChatGPT 的访问量有所下降的消息引发激烈讨论&#xff0c;不过这并不意味着开发者对于 AIGC 的热情有所减弱&#xff0c;例如素有【2023 最潮大语言模型 Web 开发框架】之称的大网红 LangChain 的热度就只增不减。 原因在于 LangChain 作为大模型能力“B2…

1快速入门MyBatis

开发前的准备 准备数据库表&#xff1a;汽⻋表t_car 确定表中的字段以及字段的数据类型 guide_price是decimal类型&#xff0c;专⻔为财务数据准备的类型produce_time可以用char类型 , 格式’2022-10-11’ 使用navicat for mysql⼯具向t_car表中插⼊两条数据 配置IDEA中ma…

【C++修炼之路】vector 模拟实现

&#x1f451;作者主页&#xff1a;安 度 因 &#x1f3e0;学习社区&#xff1a;StackFrame &#x1f4d6;专栏链接&#xff1a;C修炼之路 文章目录 一、读源码二、成员变量三、默认成员函数1、构造2、析构3、拷贝构造4、赋值重载 四、访问1、[ ] 重载2、迭代器 五、容量1、cap…

Profibus DP主站转Modbus TCP网关profibus从站地址范围

远创智控YC-DPM-TCP网关。这款产品在Profibus总线侧实现了主站功能&#xff0c;在以太网侧实现了ModbusTcp服务器功能&#xff0c;为我们的工业自动化网络带来了全新的可能。 远创智控YC-DPM-TCP网关是如何实现这些功能的呢&#xff1f;首先&#xff0c;让我们来看看它的Profib…

Oracle解析JSON字符串

Oracle解析JSON字符串 假设某个字段存储的JSON字符串&#xff0c;我们不想查出来后通过一些常见的编程语言处理&#xff08;JSON.parse()或者是JSONObject.parseObject()等&#xff09;&#xff0c;想直接在数据库上处理&#xff0c;又该如何书写呢&#xff1f; 其实在ORACLE中…

算法06-搜索算法-广度优先搜索

文章目录 参考&#xff1a;总结大纲要求搜索算法-广度优先搜索迷宫问题问题迷宫的存储迷宫的移动搜索方式代码实现 图的广度优先遍历题目描述用邻接矩阵表示图 搜索算法-广度优先搜索 参考&#xff1a; 【算法设计】用C类和队列实现图搜索的广度优先遍历算法 C/C 之 广度优先…

梯度下降(Gradient Descent)

基本思想 梯度下降是一个用来求函数最小值的算法&#xff0c;本次&#xff0c;我们将使用梯度下降算法来求出代价函数的最小值。 梯度下降背后的思想是&#xff1a;开始时我们随机选择一个参数的组合&#xff0c;计算代价函数&#xff0c;然后我们寻找下一个能让代价函数值下降…

Linux:squid透明代理

在传统代理上进行修改并添加网卡 这次不使用手动代理&#xff0c;而是把网关搞成代理 在下面这个链接里的文章实验下进行修改 Linux&#xff1a;squid传统代理_鲍海超-GNUBHCkalitarro的博客-CSDN博客 完成以后不用再win10上去配置&#xff0c;代理的那一步&#xff0c;然后…

Python(十二)常见的数据类型

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

TabLayout+ViewPager实现滚动页面

目录 一、TabLayout介绍 二、TabLayout的常用属性和方法 常用属性&#xff1a; 常用方法&#xff1a; 三、适配器介绍 &#xff08;一&#xff09;、PagerAdapter介绍&#xff1a; &#xff08;二&#xff09;、FragmentPagerAdapter介绍&#xff1a; &#xff08;三&am…

习题 1.26

我们先来看看题目要求&#xff0c;题目住说将 square 调用换成了&#xff08;* x x),结果导致执行时间变慢。 根据以前学过的内容&#xff0c;我们知道 在做显示乘法的时候&#xff0c;是直接进行计算的&#xff0c;而在做函数调用的时候&#xff0c;是先进行表达式展开的&…

【MySQL】常见函数使用(二)

&#x1f697;MySQL学习第二站~ &#x1f6a9;本文已收录至专栏&#xff1a;数据库学习之旅 ❤️文末附全文思维导图&#xff0c;感谢各位点赞收藏支持~ 就如同许多编程语言中的API一样&#xff0c;MySQL中的函数同样是官方给我们封装好的&#xff0c;可以直接调用的一段代码。…

ZooKeeper ZAB

文章首发地址 在接收到一个写请求操作后&#xff0c;追随者会将请求转发给群首&#xff0c;群首将探索性地执行该请求&#xff0c;并将执行结果以事务的方式对状态更新进行广播。一个事务中包含服务器需要执行变更的确切操作&#xff0c;当事务提交时&#xff0c;服务器就会将这…

dp算法篇Day7

"抱紧你的我&#xff0c;比国王富有~" 31、最长定差子序列 (1) 题目解析 从题目来看还是很容易理解的&#xff0c;就是找寻数组中构成差值相等的子序列。 (2) 算法原理 class Solution { public:int longestSubsequence(vector<int>& arr, int difference…