From dda90a00de87e7ec24a7eafb38ee0d8b95234f66 Mon Sep 17 00:00:00 2001 From: estom Date: Mon, 11 Aug 2025 03:29:23 -0400 Subject: [PATCH] spring context --- Spring/Spring5/SpringContext概述.md | 103 ++++++++++++++++++ .../{transformer => Transformer}/PEFT教程.md | 0 .../{transformer => Transformer}/evaluate教程.md | 0 .../image/image-1.png | Bin .../image/image-2.png | Bin .../{transformer => Transformer}/image/image.png | Bin .../{transformer => Transformer}/入门教程.md | 0 7 files changed, 103 insertions(+) create mode 100644 Spring/Spring5/SpringContext概述.md rename 人工智能/{transformer => Transformer}/PEFT教程.md (100%) rename 人工智能/{transformer => Transformer}/evaluate教程.md (100%) rename 人工智能/{transformer => Transformer}/image/image-1.png (100%) rename 人工智能/{transformer => Transformer}/image/image-2.png (100%) rename 人工智能/{transformer => Transformer}/image/image.png (100%) rename 人工智能/{transformer => Transformer}/入门教程.md (100%) diff --git a/Spring/Spring5/SpringContext概述.md b/Spring/Spring5/SpringContext概述.md new file mode 100644 index 00000000..ab79c7e0 --- /dev/null +++ b/Spring/Spring5/SpringContext概述.md @@ -0,0 +1,103 @@ +## Spring有哪些Context +Spring 里带 “Context” 的类很多,但日常真正会手动 new 出来或配置在 web.xml 里的只有 **6 个**。把它们按“运行环境”和“配置方式”两条轴一摆,就知道该选谁。 + +--------------------------------- +1. 纯 Java SE / 单元测试 +--------------------------------- +| 实现类 | 特点 | 典型场景 | +|---|---|---| +| **AnnotationConfigApplicationContext** | 注解驱动,零 XML;自动扫描 `@Component`、`@Configuration` | 单元测试、Spring Boot 早期启动器、微服务 jar | +| **GenericApplicationContext** | 完全空壳,需手动 `registerBeanDefinition` 或 `registerBean` | 需要动态编程注册 Bean 的框架二次开发、测试 | +| **GenericXmlApplicationContext** | 只读 XML,不刷新多次 | 快速起一个 XML 配置的原型,极少用 | + +--------------------------------- +2. Web 环境(Servlet) +--------------------------------- +| 实现类 | 特点 | 典型场景 | +|---|---|---| +| **XmlWebApplicationContext** | 传统 web.xml 指定 `contextConfigLocation` 的 XML | 老项目、遗留系统 | +| **AnnotationConfigWebApplicationContext** | 注解驱动,web.xml 里写 `` 指向 `@Configuration` 类 | Spring MVC 无 XML 项目、Spring Boot 内嵌容器 | +| **GroovyWebApplicationContext** | 支持 Groovy DSL 脚本 | 极小众,内部脚手架/脚本化部署 | + +--------------------------------- +3. 响应式 Web(Spring WebFlux) +--------------------------------- +| 实现类 | 特点 | 典型场景 | +|---|---|---| +| **ReactiveWebApplicationContext**(接口) | 由 Spring Boot 自动选择 `AnnotationConfigReactiveWebServerApplicationContext` | 响应式 Netty/Undertow 应用 | + +--------------------------------- +4. 一张决策表(怎么选?) + +| 场景 | 推荐 Context | +|---|---| +| 写单元测试 | `AnnotationConfigApplicationContext` | +| 写框架/工具,需要动态注册 Bean | `GenericApplicationContext` | +| 老项目 web.xml 还在用 XML | `XmlWebApplicationContext` | +| Spring MVC 新项目无 XML | `AnnotationConfigWebApplicationContext` | +| Spring Boot 默认 | 由 `SpringApplication.run()` 自动选择:
• servlet → `AnnotationConfigServletWebServerApplicationContext`
• reactive → `AnnotationConfigReactiveWebServerApplicationContext` | + +--------------------------------- +一句话记忆 +- **注解驱动**:`AnnotationConfig*ApplicationContext` +- **XML 驱动**:`Xml*ApplicationContext` +- **动态注册**:`GenericApplicationContext` +- **WebFlux**:`Reactive*ApplicationContext` + + +## SpringContext中有哪些东西 + +把 Spring 所有 **ApplicationContext**(无论哪种实现)抽象出来,它们都继承同一棵接口树,因此拥有 **一组通用能力** 和 **一批核心托管对象**。背住下面这张“九宫格”,就掌握了 Context 的全部底牌。 + +────────────────── +一、通用功能(对外 API) +────────────────── +1. **IoC 容器** + `getBean()` / `getBeansOfType()` / `containsBean()` … 直接面向开发者。 + +2. **生命周期管理** + `start()` / `stop()` / `refresh()` / `close()`,支持 SmartLifecycle 回调。 + +3. **事件广播** + `publishEvent()` + `@EventListener`(或 `ApplicationListener`),内部使用 `ApplicationEventMulticaster`。 + +4. **国际化(i18n)** + `getMessage(code, args, locale)`,底层持有一个 `MessageSource`。 + +5. **资源加载** + `getResource("classpath:...")`、`getResource("file:...")`,统一协议,底层是 `ResourceLoader`。 + +6. **Environment 抽象** + `getEnvironment().getProperty(...)`,整合 JVM 参数、系统变量、YAML/Properties、Profile。 + +────────────────── +二、核心托管对象(内部持有的“大管家”) +────────────────── +| 成员对象 | 接口/类 | 主要能力 | +|---|---|---| +| **ConfigurableEnvironment** | Environment | 统一读取配置、激活 Profile | +| **BeanFactory** | ConfigurableListableBeanFactory | 真正实例化、注入、缓存 Bean | +| **BeanDefinitionRegistry** | 同上 | 注册/删除 BeanDefinition(配方) | +| **ApplicationEventMulticaster** | ApplicationEventMulticaster | 事件广播(同步/异步) | +| **ResourceLoader** | DefaultResourceLoader | 按协议加载文件、URL、类路径资源 | +| **MessageSource** | DelegatingMessageSource | 支持 i18n 文本解析 | +| **ConversionService** | ConversionService | 类型转换(String → Date 等) | +| **PropertyResolver** | PropertySourcesPropertyResolver | 占位符 `${}` 解析 | +| **TypeConverter** | SimpleTypeConverter | 字段/参数级类型转换 | + +────────────────── +三、关系图(一句话) +``` +ApplicationContext 门面 + │ 对外暴露“九宫格”功能 + │ + ├─组合→ Environment + ├─组合→ BeanFactory(Registry) + ├─组合→ ApplicationEventMulticaster + ├─组合→ ResourceLoader + └─组合→ MessageSource +``` + +因此,无论你在用 +`AnnotationConfigApplicationContext`、`GenericApplicationContext` 还是 +`AnnotationConfigServletWebServerApplicationContext`,它们都 **统一拥有** 上述 6 大通用功能和 9 个核心托管对象,差别只在“**配置来源**”(注解、XML、Groovy、编程式)和“**运行环境**”(独立 JVM、Servlet、Reactive)。 \ No newline at end of file diff --git a/人工智能/transformer/PEFT教程.md b/人工智能/Transformer/PEFT教程.md similarity index 100% rename from 人工智能/transformer/PEFT教程.md rename to 人工智能/Transformer/PEFT教程.md diff --git a/人工智能/transformer/evaluate教程.md b/人工智能/Transformer/evaluate教程.md similarity index 100% rename from 人工智能/transformer/evaluate教程.md rename to 人工智能/Transformer/evaluate教程.md diff --git a/人工智能/transformer/image/image-1.png b/人工智能/Transformer/image/image-1.png similarity index 100% rename from 人工智能/transformer/image/image-1.png rename to 人工智能/Transformer/image/image-1.png diff --git a/人工智能/transformer/image/image-2.png b/人工智能/Transformer/image/image-2.png similarity index 100% rename from 人工智能/transformer/image/image-2.png rename to 人工智能/Transformer/image/image-2.png diff --git a/人工智能/transformer/image/image.png b/人工智能/Transformer/image/image.png similarity index 100% rename from 人工智能/transformer/image/image.png rename to 人工智能/Transformer/image/image.png diff --git a/人工智能/transformer/入门教程.md b/人工智能/Transformer/入门教程.md similarity index 100% rename from 人工智能/transformer/入门教程.md rename to 人工智能/Transformer/入门教程.md