优化readme文件

master
xuchengsheng 2023-11-09 21:10:53 +08:00
parent 1f3c6c2beb
commit ba814ca68b
4 changed files with 77 additions and 73 deletions

View File

@ -22,19 +22,9 @@ public class GroovyBeanDefinitionReaderDemo {
// 加载 Groovy 文件并注册 Bean 定义 // 加载 Groovy 文件并注册 Bean 定义
reader.loadBeanDefinitions(new ClassPathResource("my-beans.groovy")); reader.loadBeanDefinitions(new ClassPathResource("my-beans.groovy"));
while (true){ // 获取MyService
// 获取MyService MyService myService = factory.getBean(MyService.class);
MyService myService = factory.getBean(MyService.class); // 打印消息
// 打印消息 myService.showMessage();
myService.showMessage();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
reader.loadBeanDefinitions(new ClassPathResource("my-beans.groovy"));
}
} }
} }

View File

@ -1,28 +1,32 @@
## DocumentLoader ## DocumentLoader
- [DocumentLoader](#documentloader) - [DocumentLoader](#documentloader)
- [一、知识储备](#一知识储备) - [一、基本信息](#一基本信息)
- [二、基本描述](#二基本描述) - [二、知识储备](#二知识储备)
- [三、主要功能](#三主要功能) - [三、基本描述](#三基本描述)
- [四、接口源码](#四接口源码) - [四、主要功能](#四主要功能)
- [五、主要实现](#五主要实现) - [五、接口源码](#五接口源码)
- [六、最佳实践](#六最佳实践) - [六、主要实现](#六主要实现)
- [七、与其他组件的关系](#七与其他组件的关系) - [七、最佳实践](#七最佳实践)
- [八、常见问题](#八常见问题) - [八、与其他组件的关系](#八与其他组件的关系)
- [九、常见问题](#九常见问题)
### 一、基本信息
### 一、知识储备 ✒️ **作者** - Lex 📝 **博客** [掘金](https://juejin.cn/user/4251135018533068/posts) 📚 **源码地址** - [GitHub](https://github.com/xuchengsheng/spring-reading)
### 二、知识储备
1. **XML 解析技术** 1. **XML 解析技术**
+ 了解 XML 解析技术,如 DOM文档对象模型和 SAX简单 API for XML。`DocumentLoader` 通常使用 DOM 来加载和解析 XML 文档,因此理解 DOM 操作是重要的。 + 了解 XML 解析技术,如 DOM文档对象模型和 SAX简单 API for XML。`DocumentLoader` 通常使用 DOM 来加载和解析 XML 文档,因此理解 DOM 操作是重要的。
2. **资源加载** 2. **资源加载**
+ 了解如何使用 Java 资源加载机制,例如 `ClassLoader``Resource`,来获取 XML 配置文件。Spring 使用这些机制来加载配置文件。[点击查看Resource接口](https://github.com/xuchengsheng/spring-reading/tree/master/spring-resources/spring-resource)[点击查看ClassLoader接口](https://github.com/xuchengsheng/spring-reading/tree/master/spring-resources/spring-resource-resourceLoader) + 了解如何使用 Java 资源加载机制,例如 [`ResourceLoader`](https://github.com/xuchengsheng/spring-reading/tree/master/spring-resources/spring-resource-resourceLoader) 和 [`Resource`](https://github.com/xuchengsheng/spring-reading/tree/master/spring-resources/spring-resource),来获取 XML 配置文件。Spring 使用这些机制来加载配置文件。
### 、基本描述 ### 、基本描述
`DocumentLoader` 接口是 Spring 框架中的一个核心接口,用于加载和解析 XML 文档,通常用于解析 Spring 配置文件。它定义了一种方法来加载 XML 文档并将其解析为一个 `org.w3c.dom.Document` 对象,以便在 Spring 应用程序中使用,允许开发人员获取和操作 XML 配置文件的内容。这个接口允许配置文件的加载和解析过程在后台自动进行,以支持 Spring 应用的初始化和配置。 `DocumentLoader` 接口是 Spring 框架中的一个核心接口,用于加载和解析 XML 文档,通常用于解析 Spring 配置文件。它定义了一种方法来加载 XML 文档并将其解析为一个 `org.w3c.dom.Document` 对象,以便在 Spring 应用程序中使用,允许开发人员获取和操作 XML 配置文件的内容。这个接口允许配置文件的加载和解析过程在后台自动进行,以支持 Spring 应用的初始化和配置。
### 、主要功能 ### 、主要功能
1. **加载 XML 文档** 1. **加载 XML 文档**
+ `DocumentLoader` 接口定义了一个方法,用于加载 XML 文档可以从不同来源例如文件、资源、URL 等)获取 XML 内容。 + `DocumentLoader` 接口定义了一个方法,用于加载 XML 文档可以从不同来源例如文件、资源、URL 等)获取 XML 内容。
@ -35,7 +39,7 @@
5. **错误处理** 5. **错误处理**
+ `DocumentLoader` 接口还提供了一个 `ErrorHandler` 接口,用于处理 XML 解析过程中的错误信息,以便及时捕获和处理问题。 + `DocumentLoader` 接口还提供了一个 `ErrorHandler` 接口,用于处理 XML 解析过程中的错误信息,以便及时捕获和处理问题。
### 、接口源码 ### 、接口源码
`DocumentLoader` 接口用于加载和解析XML文档的策略它接受一个`InputSource`,一个实体解析器`EntityResolver`,一个错误处理器`ErrorHandler`,验证模式`validationMode`可以是DTD或XSD验证以及一个布尔值`namespaceAware`表示是否启用XML命名空间支持。方法返回一个加载后的`Document`对象。 `DocumentLoader` 接口用于加载和解析XML文档的策略它接受一个`InputSource`,一个实体解析器`EntityResolver`,一个错误处理器`ErrorHandler`,验证模式`validationMode`可以是DTD或XSD验证以及一个布尔值`namespaceAware`表示是否启用XML命名空间支持。方法返回一个加载后的`Document`对象。
@ -69,7 +73,7 @@ public interface DocumentLoader {
} }
``` ```
### 、主要实现 ### 、主要实现
1. **`DefaultDocumentLoader`** 1. **`DefaultDocumentLoader`**
+ `DefaultDocumentLoader` 是 Spring 框架的默认实现它负责加载和解析XML配置文件以支持Spring应用程序的初始化和配置。这个实现提供了灵活性可以根据需要自定义配置文件的加载和解析行为。如果需要使用不同的加载策略或验证模式可以通过配置来指定不同的`DocumentLoader`实现。 + `DefaultDocumentLoader` 是 Spring 框架的默认实现它负责加载和解析XML配置文件以支持Spring应用程序的初始化和配置。这个实现提供了灵活性可以根据需要自定义配置文件的加载和解析行为。如果需要使用不同的加载策略或验证模式可以通过配置来指定不同的`DocumentLoader`实现。
@ -88,7 +92,7 @@ classDiagram
~~~ ~~~
### 、最佳实践 ### 、最佳实践
使用 Spring 框架的默认文档加载器(`DefaultDocumentLoader`加载和解析XML配置文件并以递归方式打印XML文档的详细信息包括元素名称、属性和文本内容。通过创建一个 `Resource` 对象表示要加载的XML文件然后使用 `DefaultDocumentLoader` 进行加载和解析,并最后递归打印文档内容。 使用 Spring 框架的默认文档加载器(`DefaultDocumentLoader`加载和解析XML配置文件并以递归方式打印XML文档的详细信息包括元素名称、属性和文本内容。通过创建一个 `Resource` 对象表示要加载的XML文件然后使用 `DefaultDocumentLoader` 进行加载和解析,并最后递归打印文档内容。
@ -206,7 +210,7 @@ Element: beans
Text: Text:
``` ```
### 、与其他组件的关系 ### 、与其他组件的关系
1. **`XmlBeanDefinitionReader`** 1. **`XmlBeanDefinitionReader`**
+ `XmlBeanDefinitionReader` 是用于读取和解析 XML 配置文件的类,它在 Spring 应用程序上下文的初始化过程中使用 `DefaultDocumentLoader` 来加载和解析配置文件。这是 Spring IOC 容器的关键组件之一,用于注册和管理 Bean 定义。 + `XmlBeanDefinitionReader` 是用于读取和解析 XML 配置文件的类,它在 Spring 应用程序上下文的初始化过程中使用 `DefaultDocumentLoader` 来加载和解析配置文件。这是 Spring IOC 容器的关键组件之一,用于注册和管理 Bean 定义。
@ -215,7 +219,7 @@ Element: beans
3. **Spring Web MVC 配置** 3. **Spring Web MVC 配置**
+ 在 Spring Web MVC 应用程序中,通常会使用 `DispatcherServlet` 配置中的 `<context-param>` 元素来指定 Spring 配置文件,这个配置文件将由 `DefaultDocumentLoader` 解析以配置 Web 应用程序上下文。 + 在 Spring Web MVC 应用程序中,通常会使用 `DispatcherServlet` 配置中的 `<context-param>` 元素来指定 Spring 配置文件,这个配置文件将由 `DefaultDocumentLoader` 解析以配置 Web 应用程序上下文。
### 、常见问题 ### 、常见问题
1. **XML 文档路径和资源定位问题** 1. **XML 文档路径和资源定位问题**
+ 确保能够正确找到并加载XML文档包括检查路径、文件是否存在以及资源定位的正确性。 + 确保能够正确找到并加载XML文档包括检查路径、文件是否存在以及资源定位的正确性。

View File

@ -1,30 +1,35 @@
## ResourceLoader ## ResourceLoader
- [ResourceLoader](#resourceloader) - [ResourceLoader](#resourceloader)
- [一、知识储备](#一知识储备) - [一、基本信息](#一基本信息)
- [二、基本描述](#二基本描述) - [二、知识储备](#二知识储备)
- [三、主要功能](#三主要功能) - [三、基本描述](#三基本描述)
- [四、接口源码](#四接口源码) - [四、主要功能](#四主要功能)
- [五、主要实现](#五主要实现) - [五、接口源码](#五接口源码)
- [六、最佳实践](#六最佳实践) - [六、主要实现](#六主要实现)
- [七、与其他组件的关系](#七与其他组件的关系) - [七、最佳实践](#七最佳实践)
- [八、常见问题](#八常见问题) - [八、与其他组件的关系](#八与其他组件的关系)
- [九、常见问题](#九常见问题)
### 一、知识储备 ### 一、基本信息
✒️ **作者** - Lex 📝 **博客** [掘金](https://juejin.cn/user/4251135018533068/posts) 📚 **源码地址** - [github](https://github.com/xuchengsheng/spring-reading)
### 二、知识储备
1. **Spring 资源抽象** 1. **Spring 资源抽象**
- `org.springframework.core.io.Resource` 接口及其各种实现 [点击查看Resource接口](https://github.com/xuchengsheng/spring-reading/blob/master/spring-resources/spring-resource)。 - [`Resource`](https://github.com/xuchengsheng/spring-reading/blob/master/spring-resources/spring-resource) 接口及其各种实现
2. **路径和模式解析** 2. **路径和模式解析**
- Spring 中的路径解析,特别是使用 ant 风格的路径模式,例如 `classpath*:com/example/**/*.xml` - Spring 中的路径解析,特别是使用 ant 风格的路径模式,例如 `classpath*:com/example/**/*.xml`
3. **理解不同的资源类型** 3. **理解不同的资源类型**
- 文件资源、类路径资源、URL 资源、JAR 中的资源等。 - 文件资源、类路径资源、URL 资源、JAR 中的资源等。
### 、基本描述 ### 、基本描述
`org.springframework.core.io.ResourceLoader` 是 Spring 框架中的一个关键接口,它定义了如何获取资源(例如类路径资源、文件系统资源或网页资源)的策略。这个接口是 Spring 资源加载抽象的核心,使得应用程序可以从不同的资源位置以统一的方式加载资源。 `org.springframework.core.io.ResourceLoader` 是 Spring 框架中的一个关键接口,它定义了如何获取资源(例如类路径资源、文件系统资源或网页资源)的策略。这个接口是 Spring 资源加载抽象的核心,使得应用程序可以从不同的资源位置以统一的方式加载资源。
### 、主要功能 ### 、主要功能
1. **统一资源加载** 1. **统一资源加载**
- `ResourceLoader` 提供了一个标准化的方法来加载资源不论资源是存放在类路径、文件系统、网络URL还是其他位置。 - `ResourceLoader` 提供了一个标准化的方法来加载资源不论资源是存放在类路径、文件系统、网络URL还是其他位置。
@ -39,7 +44,7 @@
6. **内置实现与整合** 6. **内置实现与整合**
- Spring 提供了默认的 `ResourceLoader` 实现,如 `DefaultResourceLoader`。但更重要的是,`org.springframework.context.ApplicationContext` 也实现了 `ResourceLoader`,这意味着 Spring 上下文本身就是一个资源加载器。 - Spring 提供了默认的 `ResourceLoader` 实现,如 `DefaultResourceLoader`。但更重要的是,`org.springframework.context.ApplicationContext` 也实现了 `ResourceLoader`,这意味着 Spring 上下文本身就是一个资源加载器。
### 、接口源码 ### 、接口源码
`ResourceLoader` 接口为 Spring 框架定义了资源加载策略。它提供了获取资源的方法,并公开了其使用的 `ClassLoader`。通过这种策略,资源可以从各种来源(如类路径、文件系统等)以统一方式加载。这提供了资源加载的灵活性和一致性,并支持各种资源描述符,如 URL、类路径等。此外它还允许对资源句柄进行多次重新使用和读取。 `ResourceLoader` 接口为 Spring 框架定义了资源加载策略。它提供了获取资源的方法,并公开了其使用的 `ClassLoader`。通过这种策略,资源可以从各种来源(如类路径、文件系统等)以统一方式加载。这提供了资源加载的灵活性和一致性,并支持各种资源描述符,如 URL、类路径等。此外它还允许对资源句柄进行多次重新使用和读取。
@ -127,11 +132,11 @@ public interface ResourcePatternResolver extends ResourceLoader {
} }
``` ```
### 、主要实现 ### 、主要实现
1. `DefaultResourceLoader` 1. **`DefaultResourceLoader`**
+ 这是基本的资源加载器实现。它可以处理 "classpath:" 前缀的资源,如果没有提供这样的前缀,它会尝试使用类加载器或文件系统来加载资源。 + 这是基本的资源加载器实现。它可以处理 "classpath:" 前缀的资源,如果没有提供这样的前缀,它会尝试使用类加载器或文件系统来加载资源。
2. `PathMatchingResourcePatternResolver` 2. **`PathMatchingResourcePatternResolver`**
+ 这个类不仅实现了 `ResourceLoader` 接口,还实现了 `ResourcePatternResolver` 接口。它扩展了 `DefaultResourceLoader` 的功能,支持 "classpath*:" 这样的模式来加载匹配的所有资源。 + 这个类不仅实现了 `ResourceLoader` 接口,还实现了 `ResourcePatternResolver` 接口。它扩展了 `DefaultResourceLoader` 的功能,支持 "classpath*:" 这样的模式来加载匹配的所有资源。
~~~mermaid ~~~mermaid
@ -162,7 +167,7 @@ classDiagram
~~~ ~~~
### 、最佳实践 ### 、最佳实践
**`DefaultResourceLoader`** **`DefaultResourceLoader`**
@ -241,7 +246,7 @@ File = myfile2.txt
File = myfile3.txt File = myfile3.txt
``` ```
### 、与其他组件的关系 ### 、与其他组件的关系
1. **`ApplicationContext`** 1. **`ApplicationContext`**
+ 所有的 Spring `ApplicationContext` 都实现了 `ResourceLoader`。这意味着我们可以使用 Spring 上下文本身来加载资源。 + 所有的 Spring `ApplicationContext` 都实现了 `ResourceLoader`。这意味着我们可以使用 Spring 上下文本身来加载资源。
@ -264,7 +269,7 @@ File = myfile3.txt
7. **`PathMatchingResourcePatternResolver`** 7. **`PathMatchingResourcePatternResolver`**
+ 它是 `ResourcePatternResolver` 的一个实现,它扩展了 `ResourceLoader` 来处理以 "classpath*:" 开头的资源模式,这允许加载所有匹配的资源,而不仅仅是第一个找到的资源。 + 它是 `ResourcePatternResolver` 的一个实现,它扩展了 `ResourceLoader` 来处理以 "classpath*:" 开头的资源模式,这允许加载所有匹配的资源,而不仅仅是第一个找到的资源。
### 、常见问题 ### 、常见问题
1. **如何加载类路径资源?** 1. **如何加载类路径资源?**
- 使用前缀 "classpath:",例如:`loader.getResource("classpath:myconfig.xml")`。 - 使用前缀 "classpath:",例如:`loader.getResource("classpath:myconfig.xml")`。

View File

@ -1,17 +1,22 @@
## Resource ## Resource
- [Resource](#resource) - [Resource](#resource)
- [一、知识储备](#一知识储备) - [一、基本信息](#一基本信息)
- [二、基本描述](#二基本描述) - [二、知识储备](#二知识储备)
- [三、主要功能](#三主要功能) - [三、基本描述](#三基本描述)
- [四、接口源码](#四接口源码) - [四、主要功能](#四主要功能)
- [五、主要实现](#五主要实现) - [五、接口源码](#五接口源码)
- [六、最佳实践](#六最佳实践) - [六、主要实现](#六主要实现)
- [七、与其他组件的关系](#七与其他组件的关系) - [七、最佳实践](#七最佳实践)
- [八、常见问题](#八常见问题) - [八、与其他组件的关系](#八与其他组件的关系)
- [九、常见问题](#九常见问题)
### 一、知识储备 ### 一、基本信息
✒️ **作者** - Lex 📝 **博客** [掘金](https://juejin.cn/user/4251135018533068/posts) 📚 **源码地址** - [GitHub](https://github.com/xuchengsheng/spring-reading)
### 二、知识储备
1. **I/O知识** 1. **I/O知识**
+ 了解文件、路径、输入/输出流等基础概念。 + 了解文件、路径、输入/输出流等基础概念。
@ -20,11 +25,11 @@
3. **URL和URI概念** 3. **URL和URI概念**
+ 这对于理解如何从网络或其他协议中加载资源是必要的。 + 这对于理解如何从网络或其他协议中加载资源是必要的。
### 、基本描述 ### 、基本描述
`Resource` 是 Spring 框架中用于简化和统一对底层资源如文件、classpath 资源、URL 等)的访问的一个核心接口。它为不同来源的资源提供了一个共同的抽象,并隐藏了具体资源访问的细节。在 Java 开发中,资源的访问是常见的需求,如读取配置文件、图片、音频等。但 Java 的标准库为不同类型的资源提供了不同的访问机制:例如,对于文件系统中的资源,我们可能使用 `java.io.File`;对于 classpath 中的资源,我们可能使用 `ClassLoader``getResource``getResourceAsStream` 方法;对于网络资源,我们可能使用 `java.net.URL`。这些不同的机制意味着我们需要了解和使用多种方式来访问资源这导致的问题是代码复杂性增加、重复代码以及可能的错误。为了提供一个统一、简化和更高级的资源访问机制Spring 框架引入了 `Resource` 接口,这个接口为所有的资源提供了一个统一的抽象。 `Resource` 是 Spring 框架中用于简化和统一对底层资源如文件、classpath 资源、URL 等)的访问的一个核心接口。它为不同来源的资源提供了一个共同的抽象,并隐藏了具体资源访问的细节。在 Java 开发中,资源的访问是常见的需求,如读取配置文件、图片、音频等。但 Java 的标准库为不同类型的资源提供了不同的访问机制:例如,对于文件系统中的资源,我们可能使用 `java.io.File`;对于 classpath 中的资源,我们可能使用 `ClassLoader``getResource``getResourceAsStream` 方法;对于网络资源,我们可能使用 `java.net.URL`。这些不同的机制意味着我们需要了解和使用多种方式来访问资源这导致的问题是代码复杂性增加、重复代码以及可能的错误。为了提供一个统一、简化和更高级的资源访问机制Spring 框架引入了 `Resource` 接口,这个接口为所有的资源提供了一个统一的抽象。
### 、主要功能 ### 、主要功能
1. **统一的资源抽象** 1. **统一的资源抽象**
+ 无论资源来自于文件系统、classpath、URL 还是其他来源,`Resource` 接口都为其提供了一个统一的抽象。 + 无论资源来自于文件系统、classpath、URL 还是其他来源,`Resource` 接口都为其提供了一个统一的抽象。
@ -43,7 +48,7 @@
8. **多种实现** 8. **多种实现**
+ Spring 提供了多种 `Resource` 的实现,以支持不同来源的资源,如 `ClassPathResource`、`FileSystemResource` 和 `UrlResource` 等。 + Spring 提供了多种 `Resource` 的实现,以支持不同来源的资源,如 `ClassPathResource`、`FileSystemResource` 和 `UrlResource` 等。
### 、接口源码 ### 、接口源码
`InputStreamSource` 是一个简单的接口用于提供一个输入流。它被设计为可以多次返回一个新的、未读取的输入流这对于那些需要多次读取输入流的API。 `InputStreamSource` 是一个简单的接口用于提供一个输入流。它被设计为可以多次返回一个新的、未读取的输入流这对于那些需要多次读取输入流的API。
@ -154,17 +159,17 @@ public interface Resource extends InputStreamSource {
} }
``` ```
### 、主要实现 ### 、主要实现
1. `ClassPathResource` 1. **`ClassPathResource`**
+ 用于加载 classpath 下的资源。 + 用于加载 classpath 下的资源。
2. `FileSystemResource` 2. **`FileSystemResource`**
+ 用于访问文件系统中的资源。 + 用于访问文件系统中的资源。
3. `UrlResource` 3. **`UrlResource`**
+ 用于基于 URL 的资源。 + 用于基于 URL 的资源。
4. `ServletContextResource` 4. **`ServletContextResource`**
+ 用于 Web 应用中的资源。 + 用于 Web 应用中的资源。
5. `ByteArrayResource` & `InputStreamResource` 5. **`ByteArrayResource`** & **`InputStreamResource`**
+ 基于内存和流的资源表示。 + 基于内存和流的资源表示。
~~~mermaid ~~~mermaid
@ -221,7 +226,7 @@ classDiagram
~~~ ~~~
### 、最佳实践 ### 、最佳实践
**`ClassPathResource`** **`ClassPathResource`**
@ -308,7 +313,7 @@ public class InputStreamResourceDemo {
} }
``` ```
### 、与其他组件的关系 ### 、与其他组件的关系
1. **`BeanFactory&ApplicationContext`** 1. **`BeanFactory&ApplicationContext`**
+ `BeanFactory`和应用上下文`ApplicationContext`在实例化和配置Bean时通常需要访问资源。`Resource` 接口提供了一种统一的方式来加载资源文件这对于配置和初始化Bean非常有用。Bean定义中可以包含资源引用使Bean能够使用这些资源。 + `BeanFactory`和应用上下文`ApplicationContext`在实例化和配置Bean时通常需要访问资源。`Resource` 接口提供了一种统一的方式来加载资源文件这对于配置和初始化Bean非常有用。Bean定义中可以包含资源引用使Bean能够使用这些资源。
@ -319,13 +324,13 @@ public class InputStreamResourceDemo {
3. **`PropertyPlaceholderConfigurer`** 3. **`PropertyPlaceholderConfigurer`**
+ `PropertyPlaceholderConfigurer`是Spring框架中用于替换属性占位符的类。它可以将属性值从资源文件中读取然后替换配置文件中的占位符。这是通过 `locations` 属性指定的资源文件实现的。 + `PropertyPlaceholderConfigurer`是Spring框架中用于替换属性占位符的类。它可以将属性值从资源文件中读取然后替换配置文件中的占位符。这是通过 `locations` 属性指定的资源文件实现的。
4. **`MVC框架`** 4. **MVC框架**
+ Spring的MVC框架如Spring MVC通常需要处理文件上传和静态资源。`Resource` 接口及其实现可以用于管理和提供这些资源。`Resource`接口与`ResourceLoader`一起被用于加载静态资源例如图像、样式表和JavaScript文件。 + Spring的MVC框架如Spring MVC通常需要处理文件上传和静态资源。`Resource` 接口及其实现可以用于管理和提供这些资源。`Resource`接口与`ResourceLoader`一起被用于加载静态资源例如图像、样式表和JavaScript文件。
5. **`自定义资源加载和处理`** 5. **自定义资源加载和处理**
+ 我们自己也可以使用 `Resource` 接口自定义资源加载和处理逻辑。例如,我们可以创建一个自定义的 `Resource` 实现,用于加载资源文件,执行特定的处理逻辑,然后将处理后的资源提供给应用程序。 + 我们自己也可以使用 `Resource` 接口自定义资源加载和处理逻辑。例如,我们可以创建一个自定义的 `Resource` 实现,用于加载资源文件,执行特定的处理逻辑,然后将处理后的资源提供给应用程序。
### 、常见问题 ### 、常见问题
1. **如何选择合适的 `Resource` 实现?** 1. **如何选择合适的 `Resource` 实现?**
- `ClassPathResource`: 用于访问类路径下的资源。 - `ClassPathResource`: 用于访问类路径下的资源。