目录
1.spring源码编译
1.1 准备工作
本示例基于 SpringV5.2.7RELEASE+GradleWapper+jdk1.8.0_131编译
环境准备:
- maven
- jdk8+
- idea
源码下载:
Spring的源码是发布在github上面的 ,下载最新版发布版源码,只要5.x的正式发布(RELEASE)版本就行
稍微介绍版本代号
1.2 构建工具准备
安装源码对应的gradle版本(也可不安装),建议使用gradleWraper中的gradle。
Gadle介绍:
Gradle是个构建系统,能够简化你的编译、打包、测试过程。熟悉Java的同学,可以把Gradle类比成Maven。
Gradle Wrapper的作用是简化Gradle本身的安装、部署。不同版本的项目可能需要不同版本的Gradle,手工部署的话比较麻烦,而且可能产生冲突,所以需要Gradle Wrapper帮你搞定这些事情。
Gradle Wrapper是Gradle项目的一部分。
gradleWraper在该文件中有体现,相当于远程自动下载gradle到本地(所以你可以下载gradle,也可以不下,因为可以使用gradleWraper远程的统一版本):
spring-framework-5.2.7.RELEASE\gradle\wrapper\gradle-wrapper.properties
所以如果你需要下载也最好下载该链接对应的gradle版本
1.3 修改build.gradle
这个文件就相当于我们Maven的pom.xml 管理项目的依赖等信息...
设置镜像
repositories {
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" }
}
1.4 编译工作
按照官网的方式编译:
使用gradlew(gradle-wrapper命令) 先编译oxm:compileTest Java: Precompile spring-oxm with ./gradlew :spring-oxm:compileTestJava
编译compileTestJava模块
打开源码所在文件夹,在windows cmd命令中输入,在windows中当前目录无需输入“./”。
gradlew :spring-oxm:compileTestJava
配置了镜像很快(一两分钟)就能编译完成, 如果要很久说明你的镜像没起作用,如果编译异常请自行百度,每个人的电脑及环境产生的异常都有可能。
常见问题:
下载plugin出现401没有权限:
解决办法:
方案1(没有亲测). 把对应报错的plugin注释掉: 打开build.gradle--->plugins节点:
方案2(亲测有效):
- 将报错的插件去 阿里云仓库中按名字进行搜索, 如果1个都没搜到那还是采用方案1吧
- 如果搜到了开源看到是来自于gradle.plugin或jcenter仓库,并且版本只有0.0.4,没有0.0.2、
- 那这里就要改2个地方:1修改plugin下载镜像 2.修改plugin对应的版本
其他问题看笔记吧
1.5 导入项目到idea中
导入项目到idea中:Import into IntelliJ (File -> New -> Project from Existing Sources -> Navigate to directory -> Select build.gradle)
将项目导入到idea中提示配置gradle,按照如下配置
导入后等待编译,莫急,需要一点点时间,编译完成:
添加测试模块代码:Code away
new->model->gradle-->输入模块名称
编写代码测试ioc功能
1.添加依赖
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile(project(":spring-context"))
}
compile(project(":spring-context")) 代表本项目的
2.随意添加任意bean:
package cn.tulingxueyuan.beans;
import org.springframework.stereotype.Service;
/***
* @Author 徐庶 QQ:1092002729
* @Slogan 致敬大师,致敬未来的你
*/
@Service
public class UserServiceImpl {
public void sayHi(){
System.out.println("Hello Spring!");
}
}
添加启动配置类:
import cn.tulingxueyuan.beans.UserServiceImpl;
import javafx.application.Application;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/***
* @Author 徐庶 QQ:1092002729
* @Slogan 致敬大师,致敬未来的你
*/
@Configuration
@ComponentScan("cn.tulingxueyuan")
public class MainStat {
public static void main(String[] args) {
ApplicationContext context=new AnnotationConfigApplicationContext(MainStat.class);
UserServiceImpl bean = context.getBean(UserServiceImpl.class);
bean.sayHi();
}
}
正确输出,大功告成!