前言

  • 作为一名从事JavaWeb开发方向的程序猿,Spring在项目开发中的地位是十分重要的(仅次于jdk),现在基本上的项目都有使用它,之前的日常开发中对Spring的掌握程度也只是在使用层面上,对其实现的底层不是很清楚,所以特地开此系列博文来记录自己学习Spring的一些笔记及总结
  • 好记性不如烂笔头,Java开发设及的技术太多太杂,有些知识点没有总结记录过了许久又会忘记,所以论笔记的重要性

为什么要阅读源码

  • 站在巨人的肩膀上看世界,看看大佬们是怎么写代码的,是否可以运用到实际项目中
  • 许多东西不能只停留在使用层面,更要知其所以然,提高自己知识的深度
  • 可以融会贯通,看得越多,知识的互通性的愈发明显,比如一些设计思想,设计模式这些在其他框架也是大量的运用
  • 面试官会问呀

下载并导入源码

  • 源码地址 https://github.com/spring-projects/spring-framework 选择合适的版本

  • 配置gradle环境

  • 详情可见源码父目录下的import-into-idea.md说明文档来将源码导入到IDEA环境中,执行import-into-eclipse.bat脚本将源码可导入至eclipse环境中

  • 导入到IDEA环境中操作步骤

    • 进入 spring-framework 文件夹下,打开cmd,输入 gradlew :spring-oxm:compileTestJavaspring-oxm 应该预编译,因为它使用重新打包的依赖项,被其他包依赖

    • 排除 spring-aspects 模块 1、Exclude(Go to File->Project Structure->Modules) 2、右键unmark as sources root让idea不认为此目录是源代码文件夹,不然此模块不然在本地编译不过

    • 执行gradlew.bat

      问题记录

  • 执行gradle命令报错

    • 尝试更换版本,多下几个版本的gradle
  • 执行gradle命令找错误: 找不到或无法加载主类 org.gradle.wrapper.GradleWrapperMain

    • 检查源码目录下是否有 gradle/wrapper/gradle-wrapper.jar,如果没有从其他项目中copy一份
  • 执行gradle命令报taskdef class jdiff.JDiffAntTask cannot be found

    • 注释该文件的下面代码
      1
      2
      3
      4
      ant.taskdef(
      name: "jdiff",
      classname: "jdiff.JDiffAntTask",
      classpath: "${jdiffHome}/antjdiff.jar")
  • 有些类GroovyBeanDefinitionReader GroovyBeanDefinitionReader编译报错说是找不到

    • 找到对应GroovyBeanDefinitionReader的模块是spring-beans-groovy
    • 然后在找到build.gradle文件将compile(project(":spring-beans-groovy"))依赖添加到对于报错的模块中
      1
      2
      3
      4
      5
      6
      7
      8
      9
      project("spring-context") {
      description = "Spring Context"

      apply plugin: "groovy"

      dependencies {
      compile(project(":spring-aop"))
      compile(project(":spring-beans"))
      compile(project(":spring-beans-groovy"))
  • 下面的代码是已经可以在idea编译使用的源码文件 https://github.com/songshuiyang/spring-framework-4.3.10.RELEASE

坚持

  • 这个世界上从来没有一蹴而就的成功,只有经过踏实的努力,点滴的积累,这样机会降临在你头上的时候你才有能力去掌握它

参考