Spring源码介绍和编译(一)

news/2024/5/20 1:01:37 标签: spring, gradle, intellij-idea

spring_0">spring源码学习

具备
具备反射,设计模式,动态代理知识即可
学习心态: 1.不要专注细节。
2.看注释
3.见名知意
4.大胆猜测,小心验证
5.画图(时序图,结构图,总结图)
6.坚持
看源码意义:
1.提升自己阅读代码的功力(肚子有墨才能提升写作能力)
2.对框架更深层次的掌握(只有看过源码才能说精通)
3.spring是基础(从容应对各种关于框架方面的问题)
编译
准备工作
本示例基于 SpringV5.2.7RELEASE+GradleWapper+jdk1.8.0_131编译
环境准备
maven
jdk8+
idea
源码下载
进入https://github.com/spring-projects/spring-framework
Spring的源码是发布在github上面的
下载最新版发布版源码
不要太纠结版本区别,无需刻意保证跟老师一样的版本,只要5.x的正式发布(RELEASE)版本就行, 因为Spring中Ioc AOP核心分支是不会有变化的, 变的只有微小的细节。

稍微介绍版本代号

M:
M1,M2,…中的M是milestone的简写,意思是里程碑,代表着有重大改进的版本。(spring6版本要出来了,应该又是一个里程碑变化吧)

构建工具准备:
安装源码对应的gradle版本(也可不安装),建议使用gradleWraper中的gradle
Gadle介绍:
Gradle是个构建系统,能够简化你的编译、打包、测试过程。熟悉Java的同学,可以把Gradle类比成Maven。
Gradle Wrapper的作用是简化Gradle本身的安装、部署。不同版本的项目可能需要不同版本的Gradle,手工部署的话比较麻烦,而且可能产生冲突,所以需要Gradle Wrapper帮你搞定这些事情。Gradle Wrapper是Gradle项目的一部分。
Gradle无需花时间去深入学习,因为我们在学习源码的过程不会过多涉及到gradle,当然有兴趣可以去学习, 相当于后起之秀,但是maven已经够优秀了,暂时应该也没有办法替代maven。
gradleWraper在该文件中有体现,相当于远程自动下载gradle到本地(所以你可以下载gradle,也可以不下,因为可以使用gradleWraper远程的统一版本):spring-framework-5.2.7.RELEASE\gradle\wrapper\gradle-wrapper.properties
所以如果你需要下载也最好下载该链接对应的gradle版本

修改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” }
}

编译工作
按照官网的方式编译:
使用gradlew(gradle-wrapper命令) 先编译oxm:compileTest Java: Precompile spring-oxm with ./gradlew :spring-oxm:compileTestJava
编译compileTestJava模块
打开源码所在文件夹,在windows cmd命令中输入,在windows中当前目录无需输入“./”。
gradlew :spring-oxm:compileTestJava
配置了镜像很快(一两分钟)就能编译完成, 如果要很久说明你的镜像没起作用,如果编译异常请自行百度,每个人的电脑及环境产生的异常都有可能。

常见问题:
1.下载plugin出现401没有权限:

解决办法:
方案1(没有亲测). 把对应报错的plugin注释掉: 打开build.gradle—>plugins节点:

方案2(亲测有效):
将报错的插件去 阿里云仓库中按名字进行搜索, 如果1个都没搜到那还是采用方案1吧
如果搜到了开源看到是来自于gradle.plugin或jcenter仓库,并且版本只有0.0.4,没有0.0.2
那这里就要改2个地方:1修改plugin下载镜像 2.修改plugin对应的版本

gradle.plugin或jcenter仓库的镜像地址加入到settings.gradle

加入到settings.gradle

修改plugin对应的版本:

2.出现:Language version 1.1 is no longer supported; please, use version 1.3 or greater.
出现这个问题, 应该是kotlin编译版本: 你的idea 版本太新,项目版本太老: idea版本和kotlin版本有关系。
解决方案:

  1. 降低idea版本, 可以使用2019
  2. 提升项目kotlin版本:

3.出现下载不到或找不到:com.google.code.sfindbugs:jsr305:3.0.2
解决方案:
看到域名就知道, 要翻墙!!。

导入项目到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功能

添加依赖

dependencies {
testCompile group: ‘junit’, name: ‘junit’, version: ‘4.12’
compile(project(":spring-context"))
}

compile(project(":spring-context")) 代表本项目的
随意添加任意bean:
package cn.tulingxueyuan.beans;

import org.springframework.stereotype.Service;

@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;

@Configuration
@ComponentScan(“cn.tulingxueyuan”)
public class MainStat {


http://www.niftyadmin.cn/n/1668828.html

相关文章

Git 常用操作。

1.本地文件被修改后,却想要撤销所有的修改。 SVN中可以简单地将被修改的文件直接删除,重新Update一下。 Git中本以为可以将文件直接删除然后pull一下,然而却是不行的。 可以使用Revert命令来恢复:TortoiseGit → Revert 被删除的文…

KVC KVO应用场景

2019独角兽企业重金招聘Python工程师标准>>> KVC: 1.字典转模型 ,简化代码量 2.修改系统的只读变量: 例如自定义tabBar的时候,由于tabBar是只读属性,只能用KVC赋值. 3.可以任意修改一个对象的属性和变量(包括私有变量) 4.可以通过运算符层次查找对象的属性,keyPathT…

利用Python把github上非常实用的数据全部抓取下来!留给自己备用

这是我根据这个流程实现的代码,网址:LiuRoy/github_spider 递归实现 运行结果 因为每个请求延时很高,爬虫运行效率很慢,访问了几千个请求之后拿到了部分数据,这是按照查看数降序排列的python项目: 这是按粉…

AngularJs学习笔记(一)

AngularJs学习笔记&#xff08;一&#xff09; AngularJs学习笔记 最重要的功能特性 实现自动化双向的数据绑定&#xff0c;把元素值或者是输入域的值绑定到应用程序上面&#xff0c;减少了页面的DOM操作MVC模块化指令系统<div ng-app><p>Name:<input type&quo…

Java8 之stream()操作

目录 一、stream().filter() 1、案例一 2、案例二 二、Streams 中 filter(), findAny() 和 orElse()的用法 三、Streams中 filter() 和 map()的用法 四、Streams中 forache 五、strList.forEach(System.out::println); Java8特性及应用16篇&#xff1a;https://blog.csdn.net/l…

设计一个判断回文数的函数

回文数:回文数也是一个数字&#xff0c;数字的特点是正反序是同一个数字&#xff0c;例如:12321,3443,56765....。 代码如下: bool JudgeIsPalindromicNumber(int num) {int arr[20] { 0 }; int i 0,j0,count0; while (num) { arr[i] num % 10; num num / 10; count; i; } …

新开的博客,为自己祝贺一下

新开的博客&#xff0c;为自己祝贺一下转载于:https://www.cnblogs.com/Melo520/p/5980292.html

Python处理json数据--世界国家维度数据

1.准备国家的json数据 将准备好的json数据放在指定的目录下&#xff0c;此处可以重这里下载 2.测试编写python脚本处理json提取字段值 #coding:utf8 import time, re, os, sys, time,urllib2,shutil,string import json,datetime#设置utf-8编码格式 reload(sys) sys.setdefault…