springFactoriesLoader作用

人在代码在發表於2024-09-27

`SpringFactoriesLoader` 是 Spring 框架中的一個類,用於從 `META-INF/spring.factories` 檔案中載入配置。這是一個非常強大的機制,使得 Spring 能夠透過查詢類路徑上的配置檔案,動態地發現和載入特定的元件或服務。

在 Spring 自動注入(自動配置)中,`SpringFactoriesLoader` 起到了以下幾個關鍵作用:

1. **自動配置類的載入**:
- Spring Boot 使用 `SpringFactoriesLoader` 來載入自動配置類。`META-INF/spring.factories` 檔案中會列出各種自動配置類,這些類會在應用啟動時被自動載入和配置。
- 例如,`spring-boot-autoconfigure` 包中的 `META-INF/spring.factories` 檔案可能包含類似這樣的條目:
```properties
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.autoconfiguration.MyAutoConfiguration,\
com.example.autoconfiguration.AnotherAutoConfiguration
```

2. **擴充套件點**:
- `SpringFactoriesLoader` 允許開發人員定義並載入自定義的擴充套件點。例如,Spring Cloud 使用這種機制來載入各種子專案的配置和增強功能。
- 透過在類路徑上新增 `META-INF/spring.factories` 檔案,開發人員可以擴充套件 Spring 的功能,而無需修改 Spring 框架的核心程式碼。

3. **條件配置**:
- 透過與條件註解(如 `@ConditionalOnMissingBean`、`@ConditionalOnProperty` 等)結合使用,`SpringFactoriesLoader` 載入的自動配置類可以有選擇地啟用或禁用。這使得配置更加靈活和可控。

4. **簡化配置**:
- 使用 `SpringFactoriesLoader` 可以減少大量的顯式配置。開發人員無需手動在配置檔案中註冊所有的 Bean 和配置類,Spring 會自動發現並載入這些類。

### 示例

假設你有一個 `MyAutoConfiguration` 類,它是一個自動配置類,可以建立一些預設的 Bean。你可以這樣定義它:

```java
@Configuration
public class MyAutoConfiguration {

@Bean
public MyService myService() {
return new MyServiceImpl();
}
}
```

然後在 `META-INF/spring.factories` 檔案中,你需要新增以下內容:

```properties
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.autoconfiguration.MyAutoConfiguration
```

當 Spring Boot 應用啟動時,`SpringFactoriesLoader` 會讀取 `META-INF/spring.factories` 檔案,並根據配置自動載入 `MyAutoConfiguration` 類,實現自動配置。

### 總結

`SpringFactoriesLoader` 是 Spring 框架中一個重要的工具,用於從類路徑中載入配置檔案和自動配置類。它在 Spring Boot 中尤為重要,使得自動配置和擴充套件變得更加方便和靈活。

相關文章