Spring作为JAVA学习者的必须学习和熟悉的框架,需要理解Spring的设计原理,核心设计模式,对于理解设计模式,面向对象的深入理解有着深远持久的影响,特此首先要做到本地部署源码开始,下面将介绍如何本地部署Spring源码.

一. 准备工具

  • 下载GIT
  • 安装JDK1.8
  • 安装下载gradle
  • 安装好IDEA

1. git

官网下载地址:https://git-scm.com/downloads

作用:代码托管工具,代码拉取使用

2. JDK1.8及以上版本

用于JAVA开发使用的环境
    

3. gradle下载及安装

(1).官网下载地址:https://services.gradle.org/distributions/

(2).查看源码framework-bom下的gradle下的wrapper的gradle-wrapper.properties文件,查看distributionUrl的版本,然后在官网上对应下载all的zip文件,以便出错可以看其源码问题.

(3).安装成功后查看版本.

执行

 gradle -v

如上图表示安装成功.

4. IDEA 2019 版本以上

本文采用的是2019的版本.


二. 下载源码

1.官网地址:https://github.com/spring-projects/spring-framework

2.将官网地址贴到gitee上生成gitee仓库,因为github是外国服务器,通过gitee中转下载本地的速度会提高.

(1).进入官网地址,复制URL.

(2)进入gitee,选择右上角加号,选择从GITHUB/GITEE导入仓库

(3)粘贴复制的github地址到第一栏,然后为自己的仓库命名.

等待十几分钟,最新版的springframework就导入到gitee库中了.

(4)下载gitee代码到本地文件夹中.

由于最新的5.3版本有些JDK问题,所以这里选择稳定的版本5.2版本,执行命令如下:

 git clone -b 5.2.x https://gitee.com/mrliuNumberOne/spring-framework5.2.git

显示成功后即安装成功.


三. 装入IDEA,构建项目

1.IDEA操作:File--> OPEN --> 选择FRAMEWORK的项目

2.选择以项目的方式导入,选择 New Windows.

3.设置IDEA的GRADLE,File-->setting-->Build,Excution-->Build Tool--->Gradle

设置参数

4、设置 Kotlin Compiler,在Setting中搜索。

设置Target JVM Version 为1.8版本

5、修改framework-bome模块-->gradle-->wrapper-->gradle-wrapper.properties

内容:

 distributionUrl=file:///e:/dev_env/gradle-6.5.1-all.zip(这里选择gradle的压缩包的全路
径地址)

6、修改全局(根目录下的)build.gradle文件(这个就相当于是maven的pom文件),在文件头部加上。

(1)、添加如下:

 buildscript {
repositories {
// 新的spring库
maven { url "https://repo.spring.io/plugins-release" }
}
}

(2)、找到如图位置代码,修改内容如下:

 repositories {
//新增以下2个阿里云镜像
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/'}
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
mavenCentral()
maven { url "https://repo.spring.io/libs-spring-framework-build" }
// Reactor
maven { url "https://repo.spring.io/milestone" }
//新增spring插件库
maven { url "https://repo.spring.io/plugins-release" }
}

7、编译全局代码,选择右侧,圆圈符号编译

四. 编译项目

1、编译spring-oxm模块

点击右上角gradle打开编译视图,找到spring-oxm模块,然后在other下找到compileTestjava,双击即可

2、编译spring-core模块

点击右上角gradle打开编译视图,找到spring-core模块(因为之后的spring-context依赖于core),然后在other下找到compileTestjava,双击即可

3、编译整个工程(过程耗时间,可能10-20分钟!),如下图:打开顶层spring->build->build,经过一段时间编译,build成功。

五. 测试源码

1、添加新的模块,测试模块,File-->New --> Module

2、选择构建Gradle项目,Next,添加内容。

3、添加后如图所示,生成build.gradle和settings.gradle

(1)build.gradle内容(如果没有文件自行添加)

   plugins {
id 'java'
} group 'org.example'
version '1.0-SNAPSHOT' sourceCompatibility = 1.8 repositories {
mavenCentral()
} dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}

(2)settings.gradle内容(如果没有文件自行添加)

 rootProject.name = 'spring-2020test'

4、打开全局配置文件:settings.gradle文件,拉到最下面,我们看到系统自动加上了spring-2020mytest模块

5、测试模块spring-mytest,打开build.gradle文件(相当于是pom文件),默认dependencies依赖(这里的dependencies和maven里的依赖是一样的)只有一个junit,需要手工添加spring-context,spring-beans,spring-core,spring-aop这4个核心模块,具体如下:

 dependencies {

     //添加完要构建一下,否则代码中无法引用
compile(project(":spring-context"))
compile(project(":spring-beans"))
compile(project(":spring-core"))
compile(project(":spring-aop"))
testCompile group: 'junit', name: 'junit', version: '4.12'
}

6、编写一个简单的applicationContext获取容器用的bean,用来测试Spring源码构建编译过程是否成功

(1)实体类创建

 package com.youlai.spring.ch01.pojo;

 /**
* @author liuyangos8888
* <p>
* 用户类
*/
public class User { private String id;
private String userName;
private String age;
private String work;
private String salary; private StringBuilder stringBuilder = new StringBuilder(); public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
} public String getAge() {
return age;
} public void setAge(String age) {
this.age = age;
} public String getWork() {
return work;
} public void setWork(String work) {
this.work = work;
} public String getSalary() {
return salary;
} public void setSalary(String salary) {
this.salary = salary;
} @Override
public String toString() { stringBuilder.append("User :{");
stringBuilder.append("id='" + id);
stringBuilder.append("'\\''");
stringBuilder.append(", userName='" + userName);
stringBuilder.append("'\\''");
stringBuilder.append(", age='" + age);
stringBuilder.append("'\\''");
stringBuilder.append(", work='" + work);
stringBuilder.append("'\\''");
stringBuilder.append(", salary='" + salary);
stringBuilder.append("'\\''");
stringBuilder.append("'}'"); return stringBuilder.toString();
}
}
(2)创建配置类

 package com.youlai.spring.ch01.config;

 import com.youlai.spring.ch01.pojo.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration; /**
* @author liuyangos8888
*/
@Configuration
@ComponentScan("com.youlai.spring.ch01.**")
public class ContextConfig { @Bean
public User user() { User user = new User(); user.setId("1");
user.setUserName("小明");
user.setAge("18");
user.setSalary("20000.00");
user.setWork("架构师"); return user;
}
}
(3)测试类

 package com.youlai.spring.ch01;

 import com.youlai.spring.ch01.config.ContextConfig;
import com.youlai.spring.ch01.pojo.User;
import com.youlai.spring.ch01.service.IUserService;
import org.springframework.context.annotation.AnnotationConfigApplicationContext; /**
* @author liuyangos8888
*/
public class ContextApplication { public static void main(String[] args) { System.out.println("启动..........."); long startTime = System.currentTimeMillis(); System.out.println("开始时间:" + startTime + "毫秒"); AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(
ContextConfig.class
); User bean = context.getBean(User.class); System.out.println("信息:" + bean.toString()); long endTime = System.currentTimeMillis(); System.out.println("结束时间:" + endTime + "毫秒"); System.out.println("耗时:" + (endTime - startTime) + "毫秒"); } }

(4)ApplicationContext结构图

(5)结果

六. 导入依赖jar包

1.File --> Project Structure -->Libraries--> "+"-->Java

2.进入目录\spring-framework-5.2\spring-core\kotlin-coroutines\build\libs\kotlin-coroutines-5.2.0-SNAPSHOT.jar

3、在弹出的对话框中选择spring-core.main,再重新build项目即可,另一个包spring-core-5.2.9.BUILD-SNAPSHOT ,同样方法导入.

4、其他缺失包的方法同上。

附:spring源代码各个模块作用

主要模块:

spring-core:核心模块 依赖注入IOC和DI的最基本实现
       spring-beans: Bean工厂与装配
       spring-context:上下文,即IOC容器
       spring-context-support:对IOC的扩展,以及IOC子容器
       spring-context-indexer:类管理组件和Classpath扫描
       spring-expression:表达式语句


切面编程:

spring-aop:面向切面编程,CGLIB,JDKProxy

spring-aspects:集成AspectJ,Aop应用框架

spring-instrument:动态Class Loading模块


数据访问与集成:

spring-jdbc:提供JDBC主要实现模块,用于简化JDBC操作

spring-tx: spring-jdbc事务管理

spring-orm:主要集成Hibernate,jpa,jdo等

spring-oxm:将java对象映射成xml数据或将xml映射为java对象

spring-jms:发送和接受消息


web组件:

spring-web:提供了最基础的web支持,主要建立在核心容器上

spring-webmvc:实现了spring mvc的web应用

spring-websocket:主要与前端页的全双工通讯协议

spring-webflux:一个新的非阻塞函数式Reactive Web框架


报文:

spring-messaging: 4.0加入的模块,主要集成基础报文传送应用


测试:

spring-test:测试组件


集成兼容:

spring-framework-bom:解决不同模块依赖版本不同问题

Spring源码阅读 ------------------- SpringFrameWork 5.2 +IDEA 部署的更多相关文章

  1. Sping学习笔记(一)----Spring源码阅读环境的搭建

    idea搭建spring源码阅读环境 安装gradle Github下载Spring源码 新建学习spring源码的项目 idea搭建spring源码阅读环境 安装gradle 在官网中下载gradl ...

  2. Spring源码阅读 之 配置的读取,解析

    在上文中我们已经知道了Spring如何从我们给定的位置加载到配置文件,并将文件包装成一个Resource对象.这篇文章我们将要探讨的就是,如何从这个Resouce对象中加载到我们的容器?加载到容器后又 ...

  3. 搭建 Spring 源码阅读环境

    前言 有一个Spring源码阅读环境是学习Spring的基础.笔者借鉴了网上很多搭建环境的方法,也尝试了很多,接下来总结两种个人认为比较简便实用的方法.读者可根据自己的需要自行选择. 方法一:搭建基础 ...

  4. Bean实例化(Spring源码阅读)-我们到底能走多远系列(33)

    我们到底能走多远系列(33) 扯淡: 各位:    命运就算颠沛流离   命运就算曲折离奇   命运就算恐吓着你做人没趣味   别流泪 心酸 更不应舍弃   ... 主题: Spring源码阅读还在继 ...

  5. 初始化IoC容器(Spring源码阅读)

    初始化IoC容器(Spring源码阅读) 我们到底能走多远系列(31) 扯淡: 有个问题一直想问:各位你们的工资剩下来会怎么处理?已婚的,我知道工资永远都是不够的.未婚的你们,你们是怎么分配工资的? ...

  6. Spring源码阅读-ApplicationContext体系结构分析

    目录 继承层次图概览 ConfigurableApplicationContext分析 AbstractApplicationContext GenericApplicationContext Gen ...

  7. Spring源码阅读笔记02:IOC基本概念

    上篇文章中我们介绍了准备Spring源码阅读环境的两种姿势,接下来,我们就要开始探寻这个著名框架背后的原理.Spring提供的最基本最底层的功能是bean容器,这其实是对IoC思想的应用,在学习Spr ...

  8. Spring源码阅读笔记

    前言 作为一个Java开发者,工作了几年后,越发觉力有点不从心了,技术的世界实在是太过于辽阔了,接触的东西越多,越感到前所未有的恐慌. 每天捣鼓这个捣鼓那个,结果回过头来,才发现这个也不通,那个也不精 ...

  9. idea构建spring源码阅读环境

    注:由于文章不是一次性完成,下文中的test1目录和test目录应为同一个目录. (一)安装git和Gradle Spring项目托管在github之上,基于Gradle来构建项目.所以要想搭建Spr ...

随机推荐

  1. 题解 洛谷 P6349 【[PA2011]Kangaroos】

    先考虑对题目进行转化,我们称两个区间有交集为这两个区间能匹配,每个询问就是在序列中最长能连续匹配的长度. 对序列中的一个区间\([l,r]\)和询问的一个区间\([L,R]\),若满足\(L \leq ...

  2. 占个坑 未来学qt的时候专用

    今天看了一个大佬发了一个上位机图片便向大佬问道 ”上位机是用什么软件做的“大佬抛下一句qt ,在业界内很通用,windows和linux通吃,便让我萌生了一个想法,去学qt.虽说上位机时常听到,但是自 ...

  3. 亚马逊如何使用二次验证码/虚拟MFA/两步验证/谷歌验证器?

    一般点账户名——设置——安全设置中开通虚拟MFA两步验证 具体步骤见链接  亚马逊如何使用二次验证码/虚拟MFA/两步验证/谷歌验证器? 二次验证码小程序于谷歌身份验证器APP的优势 1.无需下载ap ...

  4. Git Push提示没有权限

    中途协助别人开发的一个小项目, 我已经是该项目的Developer, 可是提交代码依然提示无权限 这是由于我是在master上直接提交的, 而GitLab默认是保护master分支的, push只对M ...

  5. ICPC North Central NA Contest 2018

    目录 ICPC North Central NA Contest 2018 1. 题目分析 2. 题解 A.Pokegene B.Maximum Subarrays C.Rational Ratio ...

  6. 如何在Windows、Linux系统中安装Redis

    一:Windos下安装Redis并设置自动启动 1.下载windows版本的Redis 去官网找了很久,发现原来在官网上可以下载的windows版本的,现在官网已经没有windows版本的下载地址,只 ...

  7. 前端学习(三):body标签(一)

    进击のpython ***** 前端学习--body标签 body中的相关标签,因为是主要展现在页面的内容区域 所以相对来说内容多,杂,要背记的部分很多 当学完这节的内容之后,你可以试着写一片精致的文 ...

  8. 第二节:Centos下安装Tomcat8.5.57

    Tomcat8.5.57安装(手动配置版) 建议官网直接下载(http://tomcat.apache.org/),我本次配置使用的版本 apache-tomcat-8.5.57.tar.gz. 1. ...

  9. HBase面试考点

    HBase 架构图 组成部分及作用 Zookeeper在HBase中作用 Master的高可用 RegionServer的监控 元数据的入口 HMaster 不仅有维护集群元数据信息的功能,还能 通过 ...

  10. selenium 破解登录滑块验证码mu

    from selenium import webdriverfrom PIL import Imagefrom selenium.webdriver import ChromeOptionsfrom ...