【深入学习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