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 配置的信息完成对象的创建

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

相关推荐

  1. Spring学习registerListeners方法

    2024-04-11 20:32:05       31 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-11 20:32:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-11 20:32:05       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-11 20:32:05       82 阅读
  4. Python语言-面向对象

    2024-04-11 20:32:05       91 阅读

热门阅读

  1. Spring的Bean标签配置IOC和依赖注入详解

    2024-04-11 20:32:05       37 阅读
  2. 如何用C++判断一个系统是16位、32位还是64位?

    2024-04-11 20:32:05       38 阅读
  3. 何为C++中的协变

    2024-04-11 20:32:05       40 阅读
  4. MySQL中 not in 和 not exists 区别

    2024-04-11 20:32:05       38 阅读
  5. 分布式任务调度:架构、原理与实践

    2024-04-11 20:32:05       37 阅读
  6. 常见分类算法

    2024-04-11 20:32:05       31 阅读
  7. 【无标题】

    2024-04-11 20:32:05       23 阅读
  8. 中科软面试题

    2024-04-11 20:32:05       29 阅读
  9. 常见的正则表达式

    2024-04-11 20:32:05       38 阅读
  10. 牛客周赛39

    2024-04-11 20:32:05       34 阅读