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.为什么要使用数据库 问题 如果把数据存储到内存中,那么重启后就消失了,我们希望一个数据被保存后永久存在于一个地方,也就是需要把数据持久化 什么是持久化 把数据保存到可掉电式存储设备中以供之后使用。大多数情况…

NIO与BIO

当谈到 Java 网络编程时,经常会听到两个重要的概念:BIO(Blocking I/O,阻塞 I/O)和 NIO(Non-blocking I/O,非阻塞 I/O)。它们都是 Java 中用于处理 I/O 操作的不同编程模型。 一、介…

vue-router v4.x命名路由,编程式跳转

命名路由&#xff0c;编程式跳转 const routes:RouteRecordRaw[] [{path:/,name:A,component: ()> import(../A.vue)},{path:/B,name:B,component: ()> import(../B.vue)}, ]通过name进行跳转 <template><div><router-link :to"{name:A}">…

【postgresql 基础入门】聚合函数,通用型,统计分析型,多种多样的聚合函数满足数据的大数据的统计分析

聚合函数 ​专栏内容&#xff1a; postgresql内核源码分析手写数据库toadb并发编程 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 文章目录 聚合函数一、前…

Linux安装最新版Docker完整教程

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

MySQL如何创建存储过程

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

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

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

多卡环境 设置某张卡跑某程序

如果要在使用screen命令时指定CUDA设备&#xff0c;正确的方法是在screen命令之前设置CUDA_VISIBLE_DEVICES环境变量。由于screen会启动一个新的shell会话&#xff0c;直接在命令中设置环境变量可能不会按预期工作。因此&#xff0c;你需要先导出环境变量&#xff0c;然后再启动…

在线JSON工具

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

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

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

centos安装使用elasticsearch

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

【华为OD机试C++】删除字符串中出现次数最少的字符

《最新华为OD机试题目带答案解析》:最新华为OD机试题目带答案解析,语言包括C、C++、Python、Java、JavaScript等。订阅专栏,获取专栏内所有文章阅读权限,持续同步更新! 文章目录 描述输入描述输出描述示例代码描述 实现删除字符串中出现次数最少的字符,若出现次数最少的字…

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

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

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

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

STC8H8K64U 库函数学习笔记 —— 流水灯

STC8H8K64U 库函数学习笔记 —— 流水灯 环境说明&#xff1a; 芯片&#xff1a;STC8H8K64U 软件&#xff1a; KeilC51 μVersion V5.38.00STCAI-ISP (V6.94) 库文件说明&#xff1a;我将依赖的库文件统一放置到工程下的 lib 目录中&#xff0c;所以&#xff0c;代码中的包含指…

蓝桥杯 经验技巧篇

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

知识推理技术解析与实战

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

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

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

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

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