【深入学习Spring】1 ——源码环境搭建和Spring模块介绍

一、搭建源码环境

从Spring官网下载源码,我下载的是spring 4.3.26。

spring源码下载地址:https://github.com/spring-projects/spring-framework/releases

spring发布包下载地址:https://repo.spring.io/release/org/springframework/spring/

源码中已经提供了导入IDEA的方法,在源码根目录的import-into-idea.md文件中,照着步骤操作即可。

 

修改build.gradle文件中的默认配置(建议)

由于默认从spring仓库来下载依赖,速度较慢,改为从maven本地仓库和阿里云仓库下载。

#修改前
    repositories {
        maven { url "https://repo.spring.io/plugins-release" }
    }

#修改后
    repositories {
        //Maven本地仓库
        mavenLocal()
        //阿里云仓库
        maven {url "http://maven.aliyun.com/nexus/content/groups/public/" }
        //spring仓库(自带)
        maven { url "https://repo.spring.io/plugins-release" }
        //Maven中央资源库
        //mavenCentral()
    }

修改sonar插件版本

在编译时IDEA会有个错误提示:Cause: org/gradle/listener/ActionBroadcast,只需要升级sonarqube插件版本即可解决。参考stackoverflow相关说明:Gradle sync failed: Cause: org/gradle/listener/ActionBroadcast

plugins {
    id "org.sonarqube" version "1.1" // 改为2.5
}

修改gradle版本(可选)

gradleVersion = "2.14.1" // 改为新版本,比如6.1.1

 

接下来按照import-into-idea.md文档中的步骤操作即可,如下:
1.预编译spring-oxm模块

文档说spring-oxm使用了重新打包的依赖,所以需要预先编译。在源码根目录下执行

./gradlew cleanIdea :spring-oxm:compileTestJava

这时会下载一大堆依赖文件,最后提示成功。

如果前面没有修改仓库配置,则默认会从spring仓库下载,可能在下载gradle-2.14.1-bin.zip文件时非常慢或者失败,我们可以使用Evething工具搜索一下该文件所在目录后,手动从gradle官网下载该gradle版本放到该目录即可。然后再重新执行上面的命令就OK了。当然,我建议直接修改仓库配置,一劳永逸。

 

2.导入进idea(File->import project->import from external model->Gradle)


3.为spring源码设置jdk版本(1.8+)


4.排除spring-aspects模块(File->Project Structure->Modules)

由于IDEA不能识别aspectJ语法,会报错。aspectJ使用的ajc编译器,可以看成是javac的增强版,而IDEA默认使用的是javac编译器,无法识别aspectj语法,所以会报错。

我们可以选择直接排除spring-aspects模块,或者安装aspectJ并设置IDEA选用ajc编译器。具体操作可以参考《Spring源码深度解析》第2版中1.4章节。

另外:如果要运行spring源码中所有的测试案例,以防OOM,需要设置VM参数

-XX:MaxPermSize=2048m -Xmx2048m -XX:MaxHeapSize=2048m

二、各子模块介绍

Spring各个子模块

 

  • spring-framework-bom:版本管理

核心容器

  • spring-core:IOC、核心工具类等。
  • spring-beans:Bean的配置、创建、管理。
  • spring-beans-groovy:Spring对Groovy Bean的支持。(Groovy是一门基于JVM的动态语言,兼容Java语法)。
  • spring-context:Spring的IOC容器。建立在core和bean模块提供坚实的基础上,集成Beans模块功能并添加资源绑定、数据验证、国际化、Java EE支持、容器生命周期、事件传播等;核心接口是ApplicationContext。
  • spring-context-support:提供支持集成常见的第三方库,包括UI模版引擎(Velocity,FreeMarker,JasperReports),邮件服务(JavaMail),缓存(ehcache、caffeine、guava、jcache、transaction),任务计划Scheduling(quartz、Commonj Timer)。
  • spring-expression:Spring表达式语言(SpEL)
  • spring-aop:提供了符合AOP联盟标准的面向切面编程的实现
  • spring-aspects:提供了对AspectJ的集成支持
  • spring-messaging:提供了对消息api和消息协议支持
  • spring-instrument:提供了对检测类的支持和用于特定的应用服务器的类加载器的实现(用做探针)。仅有一个类
  • spring-instrument-tomcat:用于 Tomcat 的Spring 检测代理

Web

  • spring-web:提供了基本的Web开发集成功能。包括了远程调用(Http,Hessian/Burlap和传统RMI)
  • spring-webmvc:MVC,视图支持。提供了一个Spring MVC Web框架和REST Web服务的实现(提供了RestTemplate来访问Rest服务)。国际化、视图
  • spring-webmvc-portlet:提供了在Portlet环境中使用MVC实现
  • spring-webmvc-tiles2:
  • spring-websocket:提供对websocket的支持

数据访问/集成

  • spring-jdbc:对JDBC的简单封装
  • spring-tx:事务管理
  • spring-jms:用于JMS
  • spring-orm:提供对ORM 框架支持, 主要包括 Hibernate, Java Persistence API (JPA) 和Java Data Objects (JDO) 
  • spring-orm-hibernate4:spring-orm的hibernate4实现
  • spring-orm-hibernate5:spring-orm的hibernate5实现
  • spring-oxm:Java对象和XML文档间相互转换

测试

  • spring-text:支持使用JUnit和TestNG对Spring组件进行测试

 

spring 4.3.0 源码25个项目依赖关系图

图片来源于:https://blog.csdn.net/Jul_11th/article/details/80499223

 

posted @ 2020-02-05 22:25  静水楼台/Java部落阁  阅读(787)  评论(0编辑  收藏  举报