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

2023-05-16

目录

  • 一 Spring的基本信息
    • 1.1 Spring 概述
    • 1.2 架构
  • 二 环境搭建
    • 2.1 gradle的安装与配置
    • 2.2 Spring源码构建

a32e41535150d5a4efb0608c283d501.jpg

本图:川西旅游中拍摄的(业余摄影)
官网:Home

一 Spring的基本信息

1.1 Spring 概述

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

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

1.2 架构

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

  • 下载解压到指定目录

image.png

  • 配置环境变化

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

  • 验证

image.png

2.2 Spring源码构建

源码地址:https://github.com/spring-projects/spring-framework/tree/5.2.x
image.png
这里我们以5.2版本源码构建

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

image.png
image.png

  • 点击gradlew.bat完成源码的初步构建

image.png

  • idea 配置,我这里是2022的,其余版本可能有不一样的

image.png

  • 给 Gradle 配置国内镜像

image.png
image.png

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 进行依赖的下载,知道入下图才是源码构建成功

image.png
到了这我们基本的源码分析环境就搭建完毕了,下面我们来分析源码,从源码中吸收优秀的思想以及设计

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐