Spring 源码学习笔记(一)之搭建源码环境

前言

一直以来对 Spring 源码的理解不够全面,也不成条理,只是对其中的某小部分比较了解,所以从今天开始要重新系统学习 Spring 的源码了。

搭建源码环境

首先需要说明的是,源码环境并不是必须的,搭建源码环境唯一的好处是可以在源码上写注释,加深理解,同时方便后续调试回顾

1、从 Github 获取代码

Spring 仓库地址:https://github.com/spring-projects/spring-framework
比较推荐通过压缩包的方式下载,我这里下载的是5.1.x

2、换源

在实践的过程中,发现有些依赖会导入失败,报了个Unauthorized的异常,查了之后找到了解决方案,就是多加一些仓库就行了,具体原因可以参考下面的文章:

https://blog.csdn.net/adeyi/article/details/128605407

repositories {maven { url "https://maven.aliyun.com/repository/central" }maven { url "https://maven.aliyun.com/repository/google" }maven { url "https://maven.aliyun.com/repository/gradle-plugin" }maven { url "https://maven.aliyun.com/repository/jcenter" }maven { url "https://maven.aliyun.com/repository/spring" }maven { url "https://maven.aliyun.com/repository/spring-plugin" }maven { url "https://maven.aliyun.com/repository/public" }maven { url "https://maven.aliyun.com/repository/releases" }maven { url "https://maven.aliyun.com/repository/snapshots" }maven { url "https://maven.aliyun.com/repository/grails-core" }maven { url "https://maven.aliyun.com/repository/mapr-public" }maven { url "https://maven.aliyun.com/repository/apache-snapshots" }gradlePluginPortal()maven { url "https://repo.spring.io/plugins-release" }}

3、构建项目

将项目导入 idea 等 IDE 中,会自动构建,也可以手动构建,如下图:
image.png

Spring 的核心

众所周知,Spring 有两大核心:IOC 和 AOP ,也就是控制反转面向切面编程
而控制反转是依靠工厂(容器)来实现的,为什么工厂又被称为容器呢?
因为,这些工厂不仅要创建对象,还要能够存取对象。

工厂总览

接下来看一些重要的工厂,首先是BeanFactory,它是 Spring 体系的底层工厂,定义了工厂的基本操作。
它有一些子类:

  • HierarchicalBeanFactory:父子容器的管理
    • ConfigurableBeanFactory:可配置能力,比如 单、多实例
    • ApplicationContext :整合了多个工厂的功能,是在编程中常使用的类型
  • AutowireCapableBeanFactory:自动配置的能力
  • ListableBeanFactory:获取相关配置信息
    • XmlBeanFactory:基于 xml 配置的信息完成对象的创建

了解了这些之后,再加上之前的使用经验,就基本可以开始后面正式内容的学习了。

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

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

相关文章

[STL-list]介绍、与vector的对比、模拟实现的迭代器问题

一、list使用介绍 list的底层是带头双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行…

01.MySQL基础知识回顾

MySQL基础知识回顾 1.为什么要使用数据库 问题 如果把数据存储到内存中,那么重启后就消失了,我们希望一个数据被保存后永久存在于一个地方,也就是需要把数据持久化 什么是持久化 把数据保存到可掉电式存储设备中以供之后使用。大多数情况…

Linux安装最新版Docker完整教程

参考官网地址:Install Docker Engine on CentOS | Docker Docs 一、安装前准备工作 1.1 查看服务器系统版本以及内核版本 cat /etc/redhat-release1.2 查看服务器内核版本 uname -r这里我们使用的是CentOS 7.6 系统,内核版本为3.10 1.3 安装依赖包 …

MySQL如何创建存储过程

工作中有时候需要自己去创建存储过程,然后调用存储去获得一些数据等,接下来就给大家介绍下MySQL如何创建存储过程。 语法: CREATE PROCEDURE 存储程名([[IN|OUT|INOUT] 参数名 数据类型[,[IN|OUT|INOUT] 参数名 数据类型…]]) [特性 …] 过…

区块链技术与数字身份:解析Web3的身份验证系统

在数字化时代,随着个人数据的日益增多和网络安全的日益关注,传统的身份验证系统面临着越来越多的挑战和限制。在这种背景下,区块链技术的出现为解决这一问题提供了全新的思路和解决方案。Web3作为一个去中心化的互联网模式,其身份…

在线JSON工具

功能支持 ctrls json格式化游览器本地保存ctrla ctrlc 自动检测选中范围是否是全选,然后按照格式化方式添加到粘贴板中json 粘贴JSON自动格式化json可视化修改json压缩复制json层级折叠json关键key 搜索(自动提示高亮)满足某些近视的可以自行调整字体大小, 并且会游…

【Spring】SpringBoot整合MybatisPlusGernerator,MybatisPlus逆向工程

📝个人主页:哈__ 期待您的关注 在我们写项目的时候,我们时常会因为需要创建很多的项目结构而头疼。项目中的表很多的时候,我们连实体类都创建不完,这时候就需要我们的逆向工程来帮助我们生成我们的框架结构。这些结构…

centos安装使用elasticsearch

1.首先可以在 Elasticsearch 官网 Download Elasticsearch | Elastic 下载安装包 2. 在指定的位置(我的是/opt/zhong/)解压安装包 tar -zxvf elasticsearch-7.12.1-linux-x86_64.tar.gz 3.启动es-这种方式启动会将日志全部打印在当前页面,一旦使用 ctrlc退出就会导…

自动驾驶硬件系统- Inertial Measurement Unit (IMU)

自动驾驶硬件系统- Inertial Measurement Unit (IMU) 附赠自动驾驶学习资料和量产经验:链接 惯性测量单元(Inertial measurement unit,简称 IMU),是测量物体三轴姿态角及加速度的装置。一般IMU包括三轴陀螺仪及三轴加速度计,部分…

小米汽车:搅动市场的鲶鱼or价格战砧板上的鱼肉?

3月28日晚,备受关注的小米汽车上市发布会召开,小米集团董事长雷军宣布小米SU7正式发布。小米汽车在带飞股价的同时,二轮订购迅速售尽。 图一:小米集团股价 雷军口中“小米汽车迈出的第一步,也是人生最后一战的开篇”&a…

蓝桥杯 经验技巧篇

1. 注意事项 👨‍🏫 官方通知 👨‍🏫 资料文档 时间:4月13日 9:00~13:00 (时长 4小时)物品 准考证(赛前一周开放下载,自行打印)学生证身份证笔、水、外套&a…

知识推理技术解析与实战

目录 一、引言二、知识推理基础知识表示方法本体论语义网络图形数据库 推理机制概述演绎推理归纳推理类比推理 实践代码示例 三、知识推理的核心技术自动推理系统规则引擎推理算法 知识图谱的运用构建知识图谱知识推理与查询 推理算法深度分析转导推理逻辑推理概率推理 实践代码…

关键节点组挖掘(附Python实现)

一、实验内容简介 该实验主要利用基于度的排序和基于投票策略的排序分别挖掘出一组重要节点作为种子节点,然后在给定的网络中传播,一直到稳态,然后统计感染的规模NR。最后通过比较两种方法的感染规模给出相应的评价,给出不同感染…

合资红利耗尽,海外喜忧参半:上汽2023有点“遗憾”

作者 |老缅 编辑 |德新 3月29日,上汽集团发布2023年全年财报。 数据显示,2023年上汽集团实现总营收7447.05亿元,同比增加0.09%;归属于上市公司股东的净利润141.06亿元,同比减少12.48%;基本每股收益1.226元…

CSS - 你实现过宽高自适应的正方形吗

难度 难度级别:中高级及以上 提问概率:80% 宽高自适应的需求并不少见,尤其是在当今流行的大屏系统开发中更是随处可见,很显然已经超越了我们日常将div写死100px这样的范畴,那么如何实现一个宽高自适应的正方形呢?这里提出两种实现方案。…

景区云旅游/视频慢直播方案设计与平台搭建

一、行业背景 经文化和旅游部数据中心测算,今年清明节假期3天全国国内旅游出游1.19亿人次,按可比口径较2019年同期增长11.5%;国内游客出游花费539.5亿元,较2019年同期增长12.7%。踏青赏花和户外徒步成为假期的热门出游主题。随着…

VSCode SSH 连接 Could not establish connection to “XXX“: spawn UNKNOWN.

1. 确认问题: 拉取vscode终端:快捷键 ctrl(数字1旁边那个) 输入:ssh -V 2. 解决方法 2.1 找到本地SSH 位置 默认本地路径: C:\Windows\System32\OpenSSH 2.2 找到要修改的位置 进入 ssh 插件的设置(可以通过在插…

VIM支持C/C++/Verilog/SystemVerilog配置并支持Win/Linux环境的配置

作为一个芯片公司打杂人口,往往需要一个皮实耐打上天入地的编辑器… 一、先附上github路径,方便取走 git clone gitgithub.com:qqqw4549/vim_config_c_verilog.git 二、效果展示 支持ctrl]函数/模块跳转,支持cscope字串全局代码搜索 依赖&am…

The C programming language (second edition,KR) exercise(CHAPTER 2)

E x c e r c i s e 2 − 1 Excercise\quad 2-1 Excercise2−1&#xff1a;输出结果如图1和图2所示&#xff0c;这道练习题需要文章1和文章2的知识。 #include <stdio.h> #include <limits.h>float getFloat(char sign, unsigned char exp, unsigned mantissa); do…

数字人直播系统是什么?AI数字人直播间搭建方法来了!

无人直播的时代&#xff0c;短视频和直播平台正在风口&#xff0c;各条赛道内也早已人满为患&#xff0c;很多线下商家都想参与其中&#xff0c;因为时间、地方、设备等限制久久不能去实行起来。所以&#xff0c;数字人直播新模式成为了线下商家的救星&#xff0c;线下商家方法…