暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

1.spring源码学习环境准备

林若心夕 2021-12-13
1617
  1. 下载spring源码

  2. 编译前配置工作

    1. 下载最新版idea

    2. idea当中配置Git可用

    3. idea当中配置gradle的build方式为idea

    4. 系统及idea中jdk版本设置为1.8

    5. 修改源码build.gradle配置文件仓库为阿里镜像

    6. 修改gradle-wrapper.properties配置文件

    7. 导入到idea中,等待下载jar包即可

  3. 示例编写

    1. 新建自己的module

    2. 引用项目其它module

    3. 编写测试代码

  4. 常见的错误

    1. 不是个Git仓库

    2. Kotlin警告报错

    3. cglib或者objenesis报错

    4. spring-aspects 报错

    5. java: 找不到符合


1.下载spring源码

学习版本

version=5.2.19.BUILD-SNAPSHOT

https://gitee.com/mirrors/Spring-Framework/tree/5.2.x/


选择5.2.x分支,然后下载zip包即可。



2.编译前配置工作

2.1 下载最新版idea

社区版本即可

https://www.jetbrains.com/idea/download/other.html



2.2 idea当中配置Git可用


2.3  idea当中配置gradle的build方式为idea

可以等项目导入后改,也不着急.



2.4 系统及idea中jdk版本设置为1.8



2.5 修改源码build.gradle配置文件仓库为阿里镜像




这个也注释掉,有告警其实正常,我们忽略即可。



2.6 修改gradle-wrapper.properties配置文件


这里不修改可能也没问题,就是会慢一点,但是最好是改掉。自己手动去官网下载对应的版本,然后放在本地目录,下载链接配置成本地目录就可以了。
其它东西都不用改GRADLE_USER_HOME默认就在用户目录下的.gradle下面。
配置目的是减少网络传输,其它配置还是让idea自动处理,很多生成的目录都可以自动适配,避免出现其它问题。

原始下载网站链接:

https://services.gradle.org/distributions

 选择properties中的版本即可


    distributionUrl=https\://services.gradle.org
    /distributions/gradle-5.6.4-bin.zip

    gradle-wrapper.properties配置文件路径:spring-framework-5.2.19/gradle/wrapper/gradle-wrapper.properties



      distributionurl gradle本地配置
      mac版本
      distributionBase=GRADLE_USER_HOME
      distributionPath=wrapper/dists
      distributionUrl=file\:/Users/hs/Documents/tools
      gradle/localzip/gradle-5.6.4-bin.zip
      zipStoreBase=GRADLE_USER_HOME
      zipStorePath=wrapper/dists
      win版本:
      distributionBase=GRADLE_USER_HOME
      distributionPath=wrapper/dists
      distributionUrl=file\:///d\:/BaiduNetdiskDownload
      gradle-5.6.4-bin.zip
      zipStoreBase=GRADLE_USER_HOME
      zipStorePath=wrapper/dists


      2.7 导入到idea中,等待下载jar包即可

      idea直接open打开文件夹,剩下的就等待即可。可能时间会比较久,看个人的网速,一般在30分钟左右。



      3.示例编写

      3.1 新建自己的module

      编译通过之后,建一个自己的module,用于测试spring.

      如下图,选择Gradle,下一步后命名为spring-example.



      3.2 引用项目其它module

      这个代表的意思是引用项目自己的spring-context,注意别引用了远程仓库的module.可以参考spring-jdbc的引用方法..
      配置后刷新,等待idea索引,可以引用到spring-context中的类,并且直接跳到对应module,那就说明成功了.
        optional(project(":spring-context"))





        3.3 编写测试代码


        测试代码

          public class Test1 {
          public static void main(String[] args) {
          AnnotationConfigApplicationContext context
          = new AnnotationConfigApplicationContext();
          context.register(Bean1.class);
          context.refresh();
          System.out.println(context.getBean(Bean1.class));
          }
          }


          控制台打印bean地址

            > Task :spring-example:Test1.main()
            com.spring.Bean1@eec5a4a


            BUILD SUCCESSFUL in 3s


            注释掉 context.register(Bean1.class);控制台报异常

              Exception in thread "main" org.springframework.
              beans.factory.NoSuchBeanDefinitionException:
              No qualifying bean of type 'com.spring.Bean1' available


              4.常见的错误

              4.1 不是个Git仓库

                fatal: not a git repository (or any of the 
                parent directories): .git
                因为下载的是zip包,所以我们到项目下执行Git  init然后git commit ,重新编译即可。
                为了让我们可以在各个地方自由学习,可以考虑上传到远端,这样可以同步学习笔记。

                4.2 Kotlin警告报错

                  Kotlin: warnings found and -Weeror specified
                  有告警其实正常,我们忽略即可。把build.gradle里面的配置注释掉

                  allWarningsAsErrors = true

                  kotlin报错,处理方法是跑一下kotlin的test类,下面没有test类,但是跑一下可以实现编译。其它的都是类似跑一下测试类。



                  4.3 cglib或者objenesis报错


                  找到gradle下的spring-core,选择build/task,cglibRepackJar和objenesisRepackJar运行即可




                  4.4 spring-aspects 报错

                  解决:

                  找到setting.gradle文件,注释掉重新编译这一行即可

                    include "spring-aspects"



                    4.5 java: 找不到符合

                    运行自己的测试类报错,java:找不到符号.


                    这是编译问题,找到spring-core的项目test文件,然后邮件运行测试下,主要是为了编译,不用太在意跑的结果.


                    ps:如果继续遇到其它module有类似的问题,就按照一样的方法去对应项目跑test.


                    文章转载自林若心夕,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                    评论