Spring Boot – 配置/自動配置



本章將詳細討論 Spring Boot 配置和自動配置。

Spring Boot 配置

儘管 Spring/Spring Boot 應用可以使用 XML 文件進行配置,但通常建議使用帶有 @Configuration 註解的單個檔案來配置 Spring Boot 應用。

不同型別的註解

@Component 註解

在 Spring Boot 中,@Component 註解宣告一個類為 Spring 元件。這向 Spring 訊號表明該類應由 Spring 容器管理,這意味著它將被自動建立、初始化,並可能被注入到其他元件中。

示例

import org.springframework.stereotype.Component;

@Component
public class Utility {
...
}

@Configuration 註解

在 Spring Boot 中,@Configuration 註解用於指示一個類是 Bean 定義的來源。它是 Spring 框架中的核心註解,並非 Spring Boot 特有的。標有 @Configuration 的類可以使用類中方法上的 @Bean 註解來定義 Bean。然後,這些 Bean 由 Spring 容器管理。@Configuration 推廣基於 Java 的配置方法,而不是僅僅依賴 XML 配置檔案。

示例

@Configuration
public class AppConfig {

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

@SpringBootApplication 註解

這是一個元註解,它組合了 @EnableAutoConfiguration@ComponentScan@Configuration。它通常是引導 Spring Boot 應用所需的唯一註解。

示例

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

@ComponentScan 註解

在 Spring Boot 中,@ComponentScan 註解用於指示 Spring 掃描指定的包及其子包中的元件(用 @Component@Service@Repository@Controller 等註解的類)並將它們註冊為 Spring 應用上下文中的 Bean。預設情況下,如果您沒有顯式使用 @ComponentScan,Spring Boot 會自動掃描您的主應用程式類所在的包及其子包。如果您的元件位於不同的包結構中,您可以使用 @ComponentScan 的 basePackages 屬性來指定要掃描的包。您可以使用 basePackages 中的陣列指定多個包,例如:

basePackages = {"com.example.package1", "com.example.package2"}

示例

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan(basePackages = {"com.example.mypackage"}) 
public class MyApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

什麼是 Spring Boot 自動配置?

Spring Boot 自動配置是一項功能,它可以根據類路徑上存在的依賴項和各種屬性設定來自動配置您的 Spring 應用程式。這消除了許多手動配置的需要,使 Spring Boot 應用程式更容易設定和維護。

@SpringBootApplication 或 @EnableAutoConfiguration 註解

這些註解觸發自動配置過程。通常,您使用 @SpringBootApplication 註解您的主應用程式類,其中包含 @EnableAutoConfiguration。可以使用 @AutoConfigurationPackage 註解配置其他包。

  • 掃描類路徑 - Spring Boot 掃描類路徑以查詢庫和框架。

  • 條件配置 - 基於檢測到的依賴項,Spring Boot 應用相關的配置。這是使用 @Conditional 註解完成的,例如:

    • @ConditionalOnClass - 如果類路徑上存在特定類,則應用配置。

    • @ConditionalOnMissingBean - 如果尚未定義特定 Bean,則應用配置。

    • @ConditionalOnProperty - 基於屬性值應用配置。

  • Bean 建立和配置 - Spring Boot 基於應用的自動配置建立和配置 Bean。

    示例

    • 如果您將 spring-boot-starter-web 依賴項新增到您的專案中,Spring Boot 會自動配置 Tomcat web 伺服器以及 web 應用程式所需的其它元件。

    • 如果您添加了 spring-boot-starter-data-jpa 依賴項,Spring Boot 會自動配置資料來源、實體管理器以及基於 JPA 的資料訪問所需的其它元件。

Spring Boot 自動配置的優勢

以下是使用 Spring Boot 自動配置的一些主要優勢。

  • 減少樣板程式碼 - 自動配置消除了手動配置常用 Spring 元件的需要。

  • 加快開發速度 - 您可以快速建立 Spring Boot 應用程式,而無需編寫大量的配置程式碼。

  • 提高生產力 - 自動配置允許您專注於應用程式的核心業務邏輯。

  • 自定義 - 您可以透過以下方式自定義自動配置行為

    • 使用 @EnableAutoConfigurationexclude 屬性排除特定的自動配置類。

    • 定義您自己的 Bean 來覆蓋自動配置的 Bean。

    • 使用屬性檔案或環境變數來修改預設配置。

廣告
© . All rights reserved.