From 99ad0595cf95af46fc97169d22abecd394052f05 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 10 Jun 2020 03:13:11 +0000
Subject: [PATCH 001/178] Bump netty-all from 4.1.6.Final to 4.1.42.Final in
/Spring-Netty
Bumps [netty-all](https://github.com/netty/netty) from 4.1.6.Final to 4.1.42.Final.
- [Release notes](https://github.com/netty/netty/releases)
- [Commits](https://github.com/netty/netty/compare/netty-4.1.6.Final...netty-4.1.42.Final)
Signed-off-by: dependabot[bot]
---
Spring-Netty/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Spring-Netty/pom.xml b/Spring-Netty/pom.xml
index 14ee73a..3cfc328 100644
--- a/Spring-Netty/pom.xml
+++ b/Spring-Netty/pom.xml
@@ -16,7 +16,7 @@
1.8
- 4.1.6.Final
+ 4.1.42.Final
From 185685ad6e752a7671344789fbb46e7ef8b00f2e Mon Sep 17 00:00:00 2001
From: LuoHaiYang
Date: Tue, 11 Aug 2020 12:38:32 +0800
Subject: [PATCH 002/178] =?UTF-8?q?=E4=B8=BASpring=E6=96=87=E7=AB=A0?=
=?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=9B=AE=E5=BD=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
...226\347\225\245\346\250\241\345\274\217.md" | 18 ++++++++++++++++++
...5\273\272Spring\346\272\220\347\240\201.md" | 9 +++++++++
...250\357\274\210\344\270\212\357\274\211.md" | 12 +++++++++++-
...250\357\274\210\344\270\213\357\274\211.md" | 8 ++++++++
...7\224\250Spring\346\272\220\347\240\201.md" | 7 +++++++
5 files changed, 53 insertions(+), 1 deletion(-)
diff --git "a/note/Spring/\344\273\216Spring\346\272\220\347\240\201\344\270\255\345\255\246\344\271\240\342\200\224\342\200\224\347\255\226\347\225\245\346\250\241\345\274\217.md" "b/note/Spring/\344\273\216Spring\346\272\220\347\240\201\344\270\255\345\255\246\344\271\240\342\200\224\342\200\224\347\255\226\347\225\245\346\250\241\345\274\217.md"
index 57b6c9a..a35adcc 100644
--- "a/note/Spring/\344\273\216Spring\346\272\220\347\240\201\344\270\255\345\255\246\344\271\240\342\200\224\342\200\224\347\255\226\347\225\245\346\250\241\345\274\217.md"
+++ "b/note/Spring/\344\273\216Spring\346\272\220\347\240\201\344\270\255\345\255\246\344\271\240\342\200\224\342\200\224\347\255\226\347\225\245\346\250\241\345\274\217.md"
@@ -1,3 +1,21 @@
+
+- [前言](#前言)
+- [正文](#正文)
+ - [一、先看看初学者都会的多重if-else判断](#一先看看初学者都会的多重if-else判断)
+ - [二、策略模式实现](#二策略模式实现)
+ - [2.1 定义一个策略接口: Strategy.class](#21-定义一个策略接口-strategyclass)
+ - [2.2 创建接口的实现类](#22-创建接口的实现类)
+ - [2.3 创建Context类](#23-创建context类)
+ - [2.4 创建实现类](#24-创建实现类)
+ - [三、策略模式的优缺点](#三策略模式的优缺点)
+ - [3.1 优点](#31-优点)
+ - [3.2 缺点](#32-缺点)
+ - [3.3 策略模式中的三个角色](#33-策略模式中的三个角色)
+ - [四、在Spring源码中应用的策略模式](#四在spring源码中应用的策略模式)
+ - [4.1 Spring源码中的BeanDefinitionReader](#41-spring源码中的beandefinitionreader)
+ - [4.2 Spring源码中ResourceLoader](#42-spring源码中resourceloader)
+ - [五、总结](#五总结)
+
## 前言
策略模式听起来高大上,吓退了很多初学小伙伴,下面就来揭开策略模式的神秘面纱,并看看在Spring源码中是如何应用到策略模式的。
diff --git "a/note/Spring/\346\267\261\345\205\245Spring\346\272\220\347\240\201\347\263\273\345\210\227\357\274\210\344\270\200\357\274\211\342\200\224\342\200\224\345\234\250IDEA\344\270\255\346\236\204\345\273\272Spring\346\272\220\347\240\201.md" "b/note/Spring/\346\267\261\345\205\245Spring\346\272\220\347\240\201\347\263\273\345\210\227\357\274\210\344\270\200\357\274\211\342\200\224\342\200\224\345\234\250IDEA\344\270\255\346\236\204\345\273\272Spring\346\272\220\347\240\201.md"
index 2c72693..aadf1ba 100644
--- "a/note/Spring/\346\267\261\345\205\245Spring\346\272\220\347\240\201\347\263\273\345\210\227\357\274\210\344\270\200\357\274\211\342\200\224\342\200\224\345\234\250IDEA\344\270\255\346\236\204\345\273\272Spring\346\272\220\347\240\201.md"
+++ "b/note/Spring/\346\267\261\345\205\245Spring\346\272\220\347\240\201\347\263\273\345\210\227\357\274\210\344\270\200\357\274\211\342\200\224\342\200\224\345\234\250IDEA\344\270\255\346\236\204\345\273\272Spring\346\272\220\347\240\201.md"
@@ -1,3 +1,12 @@
+
+- [前言——万里长征的第一步](#前言万里长征的第一步)
+- [准备工作](#准备工作)
+ - [Spring源码包下载](#spring源码包下载)
+ - [gradle工具下载](#gradle工具下载)
+ - [编译Spring源码](#编译spring源码)
+ - [将Spring源码导入IDEA中](#将spring源码导入idea中)
+
+
## 前言——万里长征的第一步
要学习Spring源码,导入Spring源码到IDE是必不可少的一步,因为Spring源码各个包、各个类之间的各种关联关系非常复杂。如果仅仅是通过Spring源码文档来看,相信没多少人能坚持学下去。因此将Spring源码包导入IDE是非常必要的。本人使用IDEA较多,所以也就将Spring源码导入至IDEA中。
diff --git "a/note/Spring/\346\267\261\345\205\245Spring\346\272\220\347\240\201\347\263\273\345\210\227\357\274\210\344\272\214\357\274\211\342\200\224\342\200\224\346\267\261\345\205\245Spring\345\256\271\345\231\250\357\274\214\351\200\232\350\277\207\346\272\220\347\240\201\351\230\205\350\257\273\345\222\214\346\227\266\345\272\217\345\233\276\346\235\245\345\275\273\345\272\225\345\274\204\346\207\202Spring\345\256\271\345\231\250\357\274\210\344\270\212\357\274\211.md" "b/note/Spring/\346\267\261\345\205\245Spring\346\272\220\347\240\201\347\263\273\345\210\227\357\274\210\344\272\214\357\274\211\342\200\224\342\200\224\346\267\261\345\205\245Spring\345\256\271\345\231\250\357\274\214\351\200\232\350\277\207\346\272\220\347\240\201\351\230\205\350\257\273\345\222\214\346\227\266\345\272\217\345\233\276\346\235\245\345\275\273\345\272\225\345\274\204\346\207\202Spring\345\256\271\345\231\250\357\274\210\344\270\212\357\274\211.md"
index e277b1b..6e5eb8e 100644
--- "a/note/Spring/\346\267\261\345\205\245Spring\346\272\220\347\240\201\347\263\273\345\210\227\357\274\210\344\272\214\357\274\211\342\200\224\342\200\224\346\267\261\345\205\245Spring\345\256\271\345\231\250\357\274\214\351\200\232\350\277\207\346\272\220\347\240\201\351\230\205\350\257\273\345\222\214\346\227\266\345\272\217\345\233\276\346\235\245\345\275\273\345\272\225\345\274\204\346\207\202Spring\345\256\271\345\231\250\357\274\210\344\270\212\357\274\211.md"
+++ "b/note/Spring/\346\267\261\345\205\245Spring\346\272\220\347\240\201\347\263\273\345\210\227\357\274\210\344\272\214\357\274\211\342\200\224\342\200\224\346\267\261\345\205\245Spring\345\256\271\345\231\250\357\274\214\351\200\232\350\277\207\346\272\220\347\240\201\351\230\205\350\257\273\345\222\214\346\227\266\345\272\217\345\233\276\346\235\245\345\275\273\345\272\225\345\274\204\346\207\202Spring\345\256\271\345\231\250\357\274\210\344\270\212\357\274\211.md"
@@ -1,4 +1,14 @@
-
+
+- [前言](#前言)
+- [进入正题](#进入正题)
+ - [DefaultListableBeanFactory](#defaultlistablebeanfactory)
+ - [XmlBeanDefinitionReader](#xmlbeandefinitionreader)
+ - [通过xml配置文件来初始化容器](#通过xml配置文件来初始化容器)
+ - [提问环节](#提问环节)
+ - [深入理解Spring容器如何创建bean和初始化bean](#深入理解spring容器如何创建bean和初始化bean)
+ - [在web容器中初始化spring容器](#在web容器中初始化spring容器)
+- [参考](#参考)
+
## 前言
**Spring版本: Spring5-0-3**
diff --git "a/note/Spring/\346\267\261\345\205\245Spring\346\272\220\347\240\201\347\263\273\345\210\227\357\274\210\344\272\214\357\274\211\342\200\224\342\200\224\346\267\261\345\205\245Spring\345\256\271\345\231\250\357\274\214\351\200\232\350\277\207\346\272\220\347\240\201\351\230\205\350\257\273\345\222\214\346\227\266\345\272\217\345\233\276\346\235\245\345\275\273\345\272\225\345\274\204\346\207\202Spring\345\256\271\345\231\250\357\274\210\344\270\213\357\274\211.md" "b/note/Spring/\346\267\261\345\205\245Spring\346\272\220\347\240\201\347\263\273\345\210\227\357\274\210\344\272\214\357\274\211\342\200\224\342\200\224\346\267\261\345\205\245Spring\345\256\271\345\231\250\357\274\214\351\200\232\350\277\207\346\272\220\347\240\201\351\230\205\350\257\273\345\222\214\346\227\266\345\272\217\345\233\276\346\235\245\345\275\273\345\272\225\345\274\204\346\207\202Spring\345\256\271\345\231\250\357\274\210\344\270\213\357\274\211.md"
index 5af08d2..a180928 100644
--- "a/note/Spring/\346\267\261\345\205\245Spring\346\272\220\347\240\201\347\263\273\345\210\227\357\274\210\344\272\214\357\274\211\342\200\224\342\200\224\346\267\261\345\205\245Spring\345\256\271\345\231\250\357\274\214\351\200\232\350\277\207\346\272\220\347\240\201\351\230\205\350\257\273\345\222\214\346\227\266\345\272\217\345\233\276\346\235\245\345\275\273\345\272\225\345\274\204\346\207\202Spring\345\256\271\345\231\250\357\274\210\344\270\213\357\274\211.md"
+++ "b/note/Spring/\346\267\261\345\205\245Spring\346\272\220\347\240\201\347\263\273\345\210\227\357\274\210\344\272\214\357\274\211\342\200\224\342\200\224\346\267\261\345\205\245Spring\345\256\271\345\231\250\357\274\214\351\200\232\350\277\207\346\272\220\347\240\201\351\230\205\350\257\273\345\222\214\346\227\266\345\272\217\345\233\276\346\235\245\345\275\273\345\272\225\345\274\204\346\207\202Spring\345\256\271\345\231\250\357\274\210\344\270\213\357\274\211.md"
@@ -1,3 +1,11 @@
+
+- [前言](#前言)
+- [在web容器中初始化spring容器](#在web容器中初始化spring容器)
+ - [SpringIOC容器和Web容器](#springioc容器和web容器)
+ - [ContextLoaderListener](#contextloaderlistener)
+- [总结](#总结)
+
+
## 前言
继上一篇文章深入了解了在普通的Spring应用程序中如何创建并启动SpringIOC容器的,下面,深入学习一下在web容器中,是如何创建、初始化并启动SpringIOC容器的。
diff --git "a/note/Spring/\346\267\261\345\205\245Spring\346\272\220\347\240\201\347\263\273\345\210\227\357\274\210\350\241\245\345\205\205\347\257\207\357\274\211\342\200\224\342\200\224\347\250\213\345\272\217\350\260\203\347\224\250Spring\346\272\220\347\240\201.md" "b/note/Spring/\346\267\261\345\205\245Spring\346\272\220\347\240\201\347\263\273\345\210\227\357\274\210\350\241\245\345\205\205\347\257\207\357\274\211\342\200\224\342\200\224\347\250\213\345\272\217\350\260\203\347\224\250Spring\346\272\220\347\240\201.md"
index 6bab61d..e61a805 100644
--- "a/note/Spring/\346\267\261\345\205\245Spring\346\272\220\347\240\201\347\263\273\345\210\227\357\274\210\350\241\245\345\205\205\347\257\207\357\274\211\342\200\224\342\200\224\347\250\213\345\272\217\350\260\203\347\224\250Spring\346\272\220\347\240\201.md"
+++ "b/note/Spring/\346\267\261\345\205\245Spring\346\272\220\347\240\201\347\263\273\345\210\227\357\274\210\350\241\245\345\205\205\347\257\207\357\274\211\342\200\224\342\200\224\347\250\213\345\272\217\350\260\203\347\224\250Spring\346\272\220\347\240\201.md"
@@ -1,3 +1,10 @@
+
+- [前言](#前言)
+- [正文](#正文)
+ - [一、使用Spring源码的test测试文件来尝试启动Spring源码](#一使用spring源码的test测试文件来尝试启动spring源码)
+ - [二、解决问题](#二解决问题)
+ - [三、验证是否成功调用Spring源码](#三验证是否成功调用spring源码)
+
## 前言
前段时间一直忙于其他事情,没空下来继续研究Spring源码。最近有空又重拾Spring源码,打算继续深入研究。
From 309be5611b00373e4ac1b4831822a40078614bd2 Mon Sep 17 00:00:00 2001
From: LuoHaiYang
Date: Wed, 12 Aug 2020 10:13:18 +0800
Subject: [PATCH 003/178] =?UTF-8?q?[U]=E6=9B=B4=E6=96=B0readme?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 26 +++++++++++++++++++++-----
1 file changed, 21 insertions(+), 5 deletions(-)
diff --git a/README.md b/README.md
index b19d1fc..fefc2ab 100644
--- a/README.md
+++ b/README.md
@@ -20,11 +20,27 @@
-源码深入学习:Spring源码、SpringBoot源码、SpringAOP源码、SpringSecurity源码、OAuth2源码、JDK源码、Netty源码
+Java流行框架源码分析,学习以及总结。
-Tip:
-如果读者电脑无法浏览到github图片,则需要设置hosts配置文件, 解决办法:[解决GitHub网页githubusercontent地址无法访问问题
-](https://zhuanlan.zhihu.com/p/107691233)
+框架包括:
+
+1. Spring源码【更新中】
+2. SpringBoot源码【更新中】
+3. SpringAOP源码【更新中】
+4. SpringSecurity源码【更新中】
+5. SpringSecurity OAuth2源码【更新中】
+6. JDK源码【更新中】
+7. Netty源码(待)
+8. MyBatis(待)
+9. Dubbo源码(待)
+10. SpringCloud(待)
+
+> 为什么要分析、学习源码?
+
+学习一个框架的源码,不仅在实际使用时如果出现问题,可以快速定位出问题,找到问题原因并解决,同时还可以学习到框架的架构思想以与设计模式。当然,学习框架底层源码还可以提升我们自身的水平,在大厂面试时能够在众多面试者中脱颖而出。因此学习框架虽然枯燥乏味,但罗马并非一日建成的,所以平时之余就要多学习框架底层源码,
+这样在用到的时候就能游刃有余。
+
+> Tip:如果读者电脑无法浏览到github图片,则需要设置hosts配置文件, 解决办法:[解决GitHub网页githubusercontent地址无法访问问题](https://zhuanlan.zhihu.com/p/107691233)
# 目录
@@ -80,6 +96,6 @@ Tip:
# 支持
- 开源不易,各位帅哥美女们star支持一下....
+ 原创不易,各位帅哥美女star支持下...
From 150d962b4d1d233552e644e70ad592faf3f88dbd Mon Sep 17 00:00:00 2001
From: LuoHaiYang
Date: Wed, 12 Aug 2020 10:16:35 +0800
Subject: [PATCH 004/178] =?UTF-8?q?[U]=E6=9B=B4=E6=96=B0readme?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 2 ++
note/images/zan.jpg | Bin 0 -> 30114 bytes
2 files changed, 2 insertions(+)
create mode 100644 note/images/zan.jpg
diff --git a/README.md b/README.md
index fefc2ab..f81158f 100644
--- a/README.md
+++ b/README.md
@@ -96,6 +96,8 @@ Java流行框架源码分析,学习以及总结。
# 支持
+ 
+
原创不易,各位帅哥美女star支持下...
diff --git a/note/images/zan.jpg b/note/images/zan.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..8fa13a72d336dff64249fb646485c9cd07fa48d1
GIT binary patch
literal 30114
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