Spring源码分析(一)Spring的环境搭建与架构

本图:川西旅游中拍摄的(业余摄影) 官网: Home 参考书籍: Spring源码深度解析-郝佳编著-微信读书

:::info 建议先熟悉一下Spring的基本知识,这样对源码的理解会更加深刻,不然无法理解其中的设计思想 作者本人就是,在看到Bean的定义是时候,一脸懵逼,不知道这是干嘛的,后面看了一下Spring的基本知识,再回来看源码,就豁然开朗了 :::

一 Spring的基本信息

1.1 Spring 概述

Spring是一个分层的Java SE/EE应用一站式的轻量级开源框架,Spring核心是IOC和AOP。 Spring主要优点包括:

  • 方便解耦,简化开发,通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码造成的程序耦合度高。
  • AOP编程的支持,通过Spring提供的AOP功能,方便进行面向切面编程。
  • 声明式事务的支持,在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。
  • 方便程序的测试,可以用非容器依赖的编程方式进行几乎所有的测试工作。
  • 方便集成各种优秀框架,Spring提供了对各种优秀框架的直接支持。

1.2 架构

整个spring框架按其所属功能可以划分为五个主要模块,这五个模块几乎为企业应用提供了所需的一切,从持久层、业务层到表现层都拥有相应的支持,这就是为什么称Spring是一站式框架的原因。 🔷核心模块(Core Container)

  • Spring的核心模块实现了IoC的功能,它将类和类之间的依赖从代码中脱离出来,用配置的方式进行依赖关系描述,由IoC容器负责类的创建,管理,获取等。BeanFactory接口是Spring框架的核心接口,实现了容器很多核心的功能。
  • Context模块构建于核心模块之上,扩展了BeanFactory的功能,包括国际化,资源加载,邮件服务,任务调度等多项功能,ApplicationContext是Context模块的核心接口。
  • 表达式语言(Expression Language)是统一表达式语言(EL)的一个扩展,支持设置和获取对象属性,调用对象方法,操作数组、集合等,使用它可以很方便的通过表达式和Spring IoC容器进行交互。

🔷AOP模块

  • Spring AOP模块提供了满足AOP Alliance规范的实现,还整合了AspectJ这种AOP语言级的框架,通过AOP能降低耦合。

🔷数据访问集成模块(Data Access/Integration )

  • 事务模块:该模块用于Spring管理事务,只要是Spring管理对象都能得到Spring管理事务的好处,无需在代码中进行事务控制了,而且支持编程和声明性的事务管理。
  • JDBC模块:提供了一个JBDC的样例模板,使用这些模板能消除传统冗长的JDBC编码还有必须的事务控制,而且能享受到Spring管理事务的好处。
  • ORM模块:提供与流行的"对象-关系"映射框架的无缝集成,包括hibernate、JPA、MyBatis等。而且可以使用Spring事务管理,无需额外控制事务。
  • OXM模块:提供了一个对Object/XML映射实现,将Java对象映射成XML数据,或者将XML数据映射成java对象,Object/XML映射实现包括JAXB、Castor、XMLBeans和XStream。
  • JMS模块:用于JMS(Java Messaging Service),提供一套"消息生产者、消息消费者"模板用于更加简单的使用JMS,JMS用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。

🔷Web模块

  • 该模块建立在ApplicationContext模块之上,提供了Web应用的功能,如文件上传、FreeMarker等,Spring可以整合Struts2等MVC框架。此外,Spring自己提供了MVC框架Spring MVC。

🔷测试模块

  • Spring可以用非容器依赖的编程方式进行几乎所有的测试工作,支持JUnit和TestNG等测试框架。

二 环境搭建

参考文章:Spring 5.2.x 源码环境搭建(Windows 系统环境下)

2.1 gradle的安装与配置

➡️官方:Gradle | Releases 我这里下载的是5.6.4 :Gradle | Thank you for downloading Gradle!

  • 下载解压到指定目录
  • 配置环境变化

GRADLE_HOME:自己的安装目录 GRADLE_USER_HOME:仓库地址 %GRADLE_HOME%\bin

  • 验证

2.2 Spring源码构建

源码地址:github.com/spring-proj... 这里我们以5.2版本源码构建

  • 在编译过程中,Spring 会自动下载依赖包,默认使用的是官方镜像,下载比较慢,所以我们提前添加好国内镜像,将下面这行代码粘贴到 build.gradle 文件中的 repositories
java 复制代码
//添加阿里云镜像
maven { url "http://maven.aliyun.com/nexus/content/groups/public" }

  • 点击gradlew.bat完成源码的初步构建
  • idea 配置,我这里是2022的,其余版本可能有不一样的
  • 给 Gradle 配置国内镜像

java 复制代码
allprojects{
    repositories {
        def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public/'
        all { ArtifactRepository repo ->
            def url = repo.url.toString()
            if ((repo instanceof MavenArtifactRepository) && (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com'))) {
                project.logger.lifecycle 'Repository ${repo.url} replaced by $REPOSITORY_URL .'
                remove repo
            }
        }
        maven {
            url REPOSITORY_URL
        }
    }
}
  • 进入Idea 进行依赖的下载,知道入下图才是源码构建成功

到了这我们基本的源码分析环境就搭建完毕了,下面我们来分析源码,从源码中吸收优秀的思想以及设计,后面我的建议可以用平常的Maven环境来进行源码的分析

相关推荐
程序员大金14 分钟前
基于SpringBoot+Vue+MySQL的在线学习交流平台
java·vue.js·spring boot·后端·学习·mysql·intellij-idea
qq_25183645721 分钟前
基于SpringBoot vue 医院病房信息管理系统设计与实现
vue.js·spring boot·后端
qq_2518364571 小时前
基于springboot vue3 在线考试系统设计与实现 源码数据库 文档
数据库·spring boot·后端
2401_858120531 小时前
古典舞在线交流平台:SpringBoot设计与实现详解
java·spring boot·后端
赐你岁月如歌2 小时前
如何使用ssm实现基于web的网站的设计与实现+vue
java·后端·ssm
时清云2 小时前
【算法】合并两个有序链表
前端·算法·面试
闲宇非鱼2 小时前
微服务到底是技术问题还是管理问题?
java·后端·微服务
yanlele2 小时前
前端面试第 68 期 - 2024.10.07 更新前端面试问题总结(21道题)
前端·javascript·面试
潘多编程4 小时前
Spring Boot微服务架构设计与实战
spring boot·后端·微服务
2402_857589364 小时前
新闻推荐系统:Spring Boot框架详解
java·spring boot·后端