Skip to content

Commit

Permalink
docs: 更新文档
Browse files Browse the repository at this point in the history
  • Loading branch information
dunwu committed Jan 29, 2024
1 parent bc0f54b commit a44e5f4
Show file tree
Hide file tree
Showing 61 changed files with 172 additions and 81 deletions.
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@
classes
target
logs
.mtj.tmp/
.mtj
.tmp

# compiled files
*.class
Expand Down Expand Up @@ -41,6 +42,7 @@ dist
_book
_jsdoc
.temp
.cache
.deploy*/

# temp files
Expand Down
7 changes: 6 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,12 @@

### Web

- [Spring WebMvc](docs/01.Java/13.框架/01.Spring/03.SpringWeb/01.SpringWebMvc.md)
- [SpringWeb 综述](docs/01.Java/13.框架/01.Spring/03.SpringWeb/01.SpringWeb综述.md)
- [SpringWeb 应用](docs/01.Java/13.框架/01.Spring/03.SpringWeb/02.SpringWeb应用.md)
- [DispatcherServlet](docs/01.Java/13.框架/01.Spring/03.SpringWeb/03.DispatcherServlet.md)
- [Spring 过滤器](docs/01.Java/13.框架/01.Spring/03.SpringWeb/04.Spring过滤器.md)
- [Spring 跨域](docs/01.Java/13.框架/01.Spring/03.SpringWeb/05.Spring跨域.md)
- [Spring 视图](docs/01.Java/13.框架/01.Spring/03.SpringWeb/06.Spring视图.md)
- [SpringBoot 之应用 EasyUI](docs/01.Java/13.框架/01.Spring/03.SpringWeb/21.SpringBoot之应用EasyUI.md)

### IO
Expand Down
41 changes: 28 additions & 13 deletions docs/01.Java/13.框架/01.Spring/00.Spring综合/01.Spring概述.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: Spring Framework 综述
date: 2019-11-22 10:46:02
order: 01
categories:
- Java
- 框架
Expand All @@ -15,22 +16,21 @@ permalink: /pages/9d3091/

# Spring Framework 综述

## 什么是 Spring 框架
## Spring Framework 简介

Spring 是一个开源的 Java 框架,它的目标是简化企业级应用开发
Spring Framework 是最受欢迎的企业级 Java 应用程序开发框架。用于构建企业级应用的轻量级、一站式解决方案

Spring 框架提供了很多功能,包括依赖注入、面向切面编程、数据访问、事务管理、Web 应用开发等。通过使用 Spring,开发者可以专注于业务逻辑的实现,而不需要关注一些底层的技术细节
当谈论到大小和透明度时, Spring 是轻量级的。 Spring 框架的基础版本是在 2 MB 左右的

Spring 框架是一个轻量级的框架,它的核心容器非常小巧,只包含少量的类和接口,但它提供了很多可扩展的模块,可以根据需求灵活选择使用。Spring 框架采用松耦合的设计,可以和其他框架和库无缝集成,例如 Hibernate、MyBatis、Struts 等
Spring 框架的核心特性可以用于开发任何 Java 应用程序,但是在 Java EE 平台上构建 web 应用程序是需要扩展的。 Spring 框架的目标是使 J2EE 开发变得更容易使用,通过启用基于 POJO 编程模型来促进良好的编程实践

Spring 的主要特性
Spring Framework 设计理念如下

1. **轻量级和非侵入性**:Spring 框架的核心容器非常小巧,不会强制开发者遵循特定的编程模型。
2. **依赖注入**:Spring 框架可以通过依赖注入的方式管理对象之间的依赖关系,减少了类之间的耦合。
3. **面向切面编程**:Spring 框架提供了 AOP(面向切面编程)的支持,可以在不修改业务逻辑的情况下实现横切关注点的功能。
4. **事务管理**:Spring 框架提供了事务管理的支持,可以统一管理多个数据源的事务。
5. **Web 应用开发**:Spring 框架提供了 MVC(Model-View-Controller)的支持,可以方便地开发 Web 应用。
6. **容易测试**:Spring 框架的松耦合设计和依赖注入的支持,可以方便地进行单元测试和集成测试。
- 力争让选择无处不在
- 体现海纳百川的精神
- 保持后向兼容性
- 专注 API 设计
- 追求严苛的代码质量

## 为什么使用 Spring

Expand Down Expand Up @@ -71,7 +71,22 @@ Spring 框架的 AOP 模块提供了面向方面的程序设计实现,允许

## Spring 体系结构

Spring 当前框架有**20**个 jar 包,大致可以分为**6**大模块。
Spring 当前框架有**20**个 jar 包,大致可以分为**6**大模块:

- 1. 为什么使用 Spring
- 2. 核心思想
- 2.1. IoC
- 2.2. Aop
- 3. Spring 体系结构
- 3.1. Core Container
- 3.1.1. BeanFactory
- 3.1.2. ApplicationContext
- 3.2. AOP and Instrumentation
- 3.3. Messaging
- 3.4. Data Access / Integaration
- 3.5. Web
- 3.6. Test
- 4. 术语

Spring 框架提供了非常丰富的功能,因此整个架构也很庞大。
在我们实际的应用开发中,并不一定要使用所有的功能,而是可以根据需要选择合适的 Spring 模块。
Expand Down Expand Up @@ -170,4 +185,4 @@ Data Access/Integration 层包含了 JDBC / ORM / OXM / JMS 和 Transaction 模
- **POJO**:POJO(Plain Old Java Objects)简单的 Java 对象,它可以包含业务逻辑或持久化逻辑,但不担当任何特殊角色且不继承或不实现任何其它 Java 框架的类或接口。
- **容器**:在日常生活中容器就是一种盛放东西的器具,从程序设计角度看就是装对象的的对象,因为存在放入、拿出等操作,所以容器还要管理对象的生命周期。
- **控制反转:**即 Inversion of Control,缩写为 IoC,控制反转还有一个名字叫做依赖注入(Dependency Injection),就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。
- **JavaBean**:一般指容器管理对象,在 Spring 中指 Spring IoC 容器管理对象。
- **JavaBean**:一般指容器管理对象,在 Spring 中指 Spring IoC 容器管理对象。
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: SpringBoot 知识图谱
date: 2020-08-12 07:01:26
order: 21
categories:
- Java
- 框架
Expand Down Expand Up @@ -108,8 +109,6 @@ public interface BeanPostProcessor {

为了理解这两个方法执行的时机,简单的了解下 bean 的整个生命周期:

![img](data:image/svg+xml;utf8,<?xml version="1.0"?><svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="810" height="384"></svg>) _Bean 的实例化过程(来自:Spring 揭秘)_

`postProcessBeforeInitialization()`方法与`postProcessAfterInitialization()`分别对应图中前置处理和后置处理两个步骤将执行的方法。这两个方法中都传入了 bean 对象实例的引用,为扩展容器的对象实例化过程提供了很大便利,在这儿几乎可以对传入的实例执行任何操作。注解、AOP 等功能的实现均大量使用了`BeanPostProcessor`,比如有一个自定义注解,你完全可以实现 BeanPostProcessor 的接口,在其中判断 bean 对象的脑袋上是否有该注解,如果有,你可以对这个 bean 实例执行任何操作,想想是不是非常的简单?

再来看一个更常见的例子,在 Spring 中经常能够看到各种各样的 Aware 接口,其作用就是在对象实例化完成以后将 Aware 接口定义中规定的依赖注入到当前实例中。比如最常见的`ApplicationContextAware`接口,实现了这个接口的类都可以获取到一个 ApplicationContext 对象。当容器中每个对象的实例化过程走到 BeanPostProcessor 前置处理这一步时,容器会检测到之前注册到容器的 ApplicationContextAwareProcessor,然后就会调用其 postProcessBeforeInitialization()方法,检查并设置 Aware 相关依赖。看看代码吧,是不是很简单:
Expand Down Expand Up @@ -932,7 +931,7 @@ public void initialize(ConfigurableApplicationContext context) {
}
```

然后你就可以进入到`PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors()`方法了,这个方法除了会遍历上面的 3 个 BeanFactoryPostProcessor 处理外,还会获取类型为`BeanDefinitionRegistryPostProcessor`的 bean:`org.springframework.context.annotation.internalConfigurationAnnotationProcessor`,对应的 Class 为`ConfigurationClassPostProcessor``ConfigurationClassPostProcessor`用于解析处理各种注解,包括:@Configuration@ComponentScan@Import@PropertySource@ImportResource@Bean。当处理`@import`注解的时候,就会调用<自动配置>这一小节中的`EnableAutoConfigurationImportSelector.selectImports()`来完成自动配置功能。其他的这里不再多讲,如果你有兴趣,可以查阅参考资料 6。
然后你就可以进入到`PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors()`方法了,这个方法除了会遍历上面的 3 个 BeanFactoryPostProcessor 处理外,还会获取类型为`BeanDefinitionRegistryPostProcessor`的 bean:`org.springframework.context.annotation.internalConfigurationAnnotationProcessor`,对应的 Class 为`ConfigurationClassPostProcessor``ConfigurationClassPostProcessor`用于解析处理各种注解,包括:@Configuration@ComponentScan@Import@PropertySource@ImportResource@Bean。当处理`@import`注解的时候,就会调用自动配置这一小节中的`EnableAutoConfigurationImportSelector.selectImports()`来完成自动配置功能。其他的这里不再多讲,如果你有兴趣,可以查阅参考资料 6。

⑧、查找当前 context 中是否注册有 CommandLineRunner 和 ApplicationRunner,如果有则遍历执行它们。

Expand All @@ -949,4 +948,4 @@ public void initialize(ConfigurableApplicationContext context) {
[3][craig walls 著;丁雪丰 译;spring boot 实战;中国工信出版集团 人民邮电出版社,2016](https://link.jianshu.com/?t=http%3A%2F%2Funion-click.jd.com%2Fjdc%3Fd%3DAQ6oHO)
[4][深入探讨 java 类加载器](https://link.jianshu.com/?t=https%3A%2F%2Fwww.ibm.com%2Fdeveloperworks%2Fcn%2Fjava%2Fj-lo-classloader%2F) : [www.ibm.com/developerwo…](https://link.jianshu.com/?t=https%3A%2F%2Fwww.ibm.com%2Fdeveloperworks%2Fcn%2Fjava%2Fj-lo-classloader%2F)
[5][spring boot 实战:自动配置原理分析](https://link.jianshu.com/?t=http%3A%2F%2Fblog.csdn.net%2Fliaokailin%2Farticle%2Fdetails%2F49559951) : [blog.csdn.net/liaokailin/…](https://link.jianshu.com/?t=http%3A%2F%2Fblog.csdn.net%2Fliaokailin%2Farticle%2Fdetails%2F49559951)
[6][spring boot实战:spring boot bean加载源码分析](https://link.jianshu.com/?t=http%3A%2F%2Fblog.csdn.net%2Fliaokailin%2Farticle%2Fdetails%2F49107209): [blog.csdn.net/liaokailin/…](https://link.jianshu.com/?t=http%3A%2F%2Fblog.csdn.net%2Fliaokailin%2Farticle%2Fdetails%2F49107209)
[6][spring boot实战:spring boot bean加载源码分析](https://link.jianshu.com/?t=http%3A%2F%2Fblog.csdn.net%2Fliaokailin%2Farticle%2Fdetails%2F49107209): [blog.csdn.net/liaokailin/…](https://link.jianshu.com/?t=http%3A%2F%2Fblog.csdn.net%2Fliaokailin%2Farticle%2Fdetails%2F49107209)
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: SpringBoot 基本原理
date: 2020-08-12 07:01:26
order: 22
categories:
- Java
- 框架
Expand Down Expand Up @@ -282,4 +283,4 @@ public abstract class SpringFactoriesLoader {

## 参考资料

- [一文搞懂 springboot 启动原理](https://www.jianshu.com/p/943650ab7dfd)
- [一文搞懂 springboot 启动原理](https://www.jianshu.com/p/943650ab7dfd)
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: Spring 面试
date: 2018-08-02 17:33:32
order: 99
categories:
- Java
- 框架
Expand All @@ -16,17 +17,6 @@ permalink: /pages/db33b0/

# Spring 面试

1. 什么是 Spring 框架?它的主要特点是什么?
2. Spring 框架中的依赖注入是什么?如何实现依赖注入?
3. Spring AOP 是什么?它的作用是什么?如何在 Spring 中使用 AOP?
4. Spring 中的 Bean 是什么?如何定义一个 Bean?
5. Spring MVC 是什么?如何在 Spring 中使用 MVC?
6. Spring Boot 是什么?它和 Spring 框架有什么区别?
7. Spring 中的事务管理是什么?如何在 Spring 中管理事务?
8. Spring Security 是什么?它的主要功能是什么?
9. Spring 中的集成测试是什么?如何在 Spring 中进行集成测试?
10. 如何在 Spring 中实现 RESTful Web 服务?

## 综合篇

### 不同版本的 Spring Framework 有哪些主要功能?
Expand Down Expand Up @@ -594,7 +584,7 @@ DispatcherServlet 的工作流程可以用一幅图来说明:
![img](https://raw.githubusercontent.com/dunwu/images/master/cs/java/spring/web/spring-dispatcher-servlet.png)
1. 向服务器发送 HTTP 请求,请求被前端控制器 `DispatcherServlet` 捕获。
2. `DispatcherServlet` 根据 **<servlet-name>-servlet.xml** 中的配置对请求的 URL 进行解析,得到请求资源标识符(URI)。然后根据该 URI,调用 `HandlerMapping` 获得该 Handler 配置的所有相关的对象(包括 Handler 对象以及 Handler 对象对应的拦截器),最后以`HandlerExecutionChain` 对象的形式返回。
2. `DispatcherServlet` 根据 **`<servlet-name>-servlet.xml`** 中的配置对请求的 URL 进行解析,得到请求资源标识符(URI)。然后根据该 URI,调用 `HandlerMapping` 获得该 Handler 配置的所有相关的对象(包括 Handler 对象以及 Handler 对象对应的拦截器),最后以`HandlerExecutionChain` 对象的形式返回。
3. `DispatcherServlet` 根据获得的`Handler`,选择一个合适的 `HandlerAdapter`。(附注:如果成功获得`HandlerAdapter`后,此时将开始执行拦截器的 preHandler(...)方法)。
4. 提取`Request`中的模型数据,填充`Handler`入参,开始执行`Handler`(`Controller`)。 在填充`Handler`的入参过程中,根据你的配置,Spring 将帮你做一些额外的工作:
- HttpMessageConveter: 将请求消息(如 Json、xml 等数据)转换成一个对象,将对象转换为指定的响应信息。
Expand All @@ -619,4 +609,4 @@ WebApplicationContext 是 ApplicationContext 的扩展。它具有 Web 应用程
## 资料
- [Top 50 Spring Interview Questions You Must Prepare In 2018](https://www.edureka.co/blog/interview-questions/spring-interview-questions/)
- [Spring Interview Questions and Answers](https://www.journaldev.com/2696/spring-interview-questions-and-answers)
- [Spring Interview Questions and Answers](https://www.journaldev.com/2696/spring-interview-questions-and-answers)
3 changes: 2 additions & 1 deletion docs/01.Java/13.框架/01.Spring/00.Spring综合/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ tags:
- SpringBoot
permalink: /pages/9e0b67/
hidden: true
index: false
---

# Spring 综述
Expand All @@ -39,4 +40,4 @@ hidden: true

## 🚪 传送

◾ 💧 [钝悟的 IT 知识图谱](https://dunwu.github.io/waterdrop/) 🎯 [我的博客](https://github.com/dunwu/blog)
◾ 💧 [钝悟的 IT 知识图谱](https://dunwu.github.io/waterdrop/)
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: Spring Bean
date: 2021-12-10 19:15:42
order: 01
categories:
- Java
- 框架
Expand Down Expand Up @@ -210,4 +211,4 @@ Spring Bean 垃圾回收步骤:
## 参考资料

- [Spring 官方文档之 Core Technologies](https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans)
- [《小马哥讲 Spring 核心编程思想》](https://time.geekbang.org/course/intro/265)
- [《小马哥讲 Spring 核心编程思想》](https://time.geekbang.org/course/intro/265)
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: Spring IoC
date: 2020-08-30 16:06:10
order: 02
categories:
- Java
- 框架
Expand Down Expand Up @@ -917,4 +918,4 @@ Bean 默认是单例的,所以单例的 Controller 注入的 Service 也是一
## 参考资料

- [Spring 官方文档之 Core Technologies](https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans)
- [《小马哥讲 Spring 核心编程思想》](https://time.geekbang.org/course/intro/265)
- [《小马哥讲 Spring 核心编程思想》](https://time.geekbang.org/course/intro/265)
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: Spring 依赖查找
date: 2020-08-30 16:06:10
order: 03
categories:
- Java
- 框架
Expand Down Expand Up @@ -145,4 +146,4 @@ Bean 延迟依赖查找接口
## 参考资料

- [Spring 官方文档之 Core Technologies](https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans)
- [《小马哥讲 Spring 核心编程思想》](https://time.geekbang.org/course/intro/265)
- [《小马哥讲 Spring 核心编程思想》](https://time.geekbang.org/course/intro/265)
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: Spring 依赖注入
date: 2020-08-30 16:06:10
order: 04
categories:
- Java
- 框架
Expand Down Expand Up @@ -374,4 +375,4 @@ Aware 系列接口回调
## 参考资料

- [Spring 官方文档之 Core Technologies](https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans)
- [《小马哥讲 Spring 核心编程思想》](https://time.geekbang.org/course/intro/265)
- [《小马哥讲 Spring 核心编程思想》](https://time.geekbang.org/course/intro/265)
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: Spring IoC 依赖来源
date: 2022-12-20 20:33:51
order: 05
categories:
- Java
- 框架
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: Spring Bean 作用域
date: 2022-12-21 11:42:00
order: 06
categories:
- Java
- 框架
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: Spring Bean 生命周期
date: 2022-12-21 19:26:01
order: 07
categories:
- Java
- 框架
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: Spring 配置元数据
date: 2022-12-21 19:49:48
order: 08
categories:
- Java
- 框架
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: Spring 应用上下文生命周期
date: 2022-12-23 09:58:09
order: 09
categories:
- Java
- 框架
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: Spring AOP
date: 2020-02-26 23:47:47
order: 10
categories:
- Java
- 框架
Expand Down Expand Up @@ -395,4 +396,4 @@ around advice 和前面的 before advice 差不多, 只是我们把注解 **@Bef

## 参考资料

- [《 Spring 实战(第 4 版)》](https://item.jd.com/11899370.html)
- [《 Spring 实战(第 4 版)》](https://item.jd.com/11899370.html)
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: Spring 资源管理
date: 2019-09-04 19:46:41
order: 20
categories:
- Java
- 框架
Expand Down Expand Up @@ -257,4 +258,4 @@ Spring 配置资源中有哪些常见类型?
## 参考资料

- [Spring 官方文档之 Core Technologies](https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans)
- [《小马哥讲 Spring 核心编程思想》](https://time.geekbang.org/course/intro/265)
- [《小马哥讲 Spring 核心编程思想》](https://time.geekbang.org/course/intro/265)
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: Spring 校验
date: 2022-12-22 17:42:28
order: 21
categories:
- Java
- 框架
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: Spring 数据绑定
date: 2022-12-22 19:26:57
order: 22
categories:
- Java
- 框架
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: Spring 类型转换
date: 2022-12-22 19:43:59
order: 23
categories:
- Java
- 框架
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: Spring EL 表达式
date: 2023-01-12 20:26:46
order: 24
categories:
- Java
- 框架
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: Spring 事件
date: 2022-12-22 20:31:02
order: 25
categories:
- Java
- 框架
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: Spring 国际化
date: 2022-12-22 11:44:54
order: 26
categories:
- Java
- 框架
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
title: Spring 泛型处理
date: 2022-12-22 20:11:52
order: 27
categories:
- Java
- 框架
Expand Down
Loading

0 comments on commit a44e5f4

Please sign in to comment.