zoukankan      html  css  js  c++  java
  • Spring源码系列1

    一、搭建源码环境

    从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文件中,照着步骤操作即可。

    0.修改build.gradle文件中的默认配置

    修改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-hibernate5:

    spring-oxm:Java对象和XML文档间相互转换

    测试

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

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

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

  • 相关阅读:
    css开发素材网址
    html5笔记(标签)
    cms实例笔记(二)
    ie 元素兼容性总结
    ps常用键
    视图适配
    JavaScript 全部介绍
    cmscp实例笔记
    Google proto buffer的安装/使用
    ntp时间同步服务器配置
  • 原文地址:https://www.cnblogs.com/rouqinglangzi/p/12266054.html
Copyright © 2011-2022 走看看