Spring Boot筆記 #03# Developing with Spring Boot

譯自:https://docs.spring.io/spring-boot/docs/current/reference/html/using.html#using

4. Auto-configuration

Spring Boot auto-configuration嘗試根據添加的jar依賴項自動配置Spring應用程序。例如,如果HSQLDB在類路徑上,並且您沒有手動配置任何數據庫連接bean,那麼Spring Boot將自動配置內存中的數據庫。

您需要通過在@Configuration類中添加@EnableAutoConfiguration或@SpringBootApplication註解來啓用自動配置。

您應該只添加一個@SpringBootApplication或@EnableAutoConfiguration註解。我們通常建議您只將其中一個添加到主@Configuration類中。

4.1. Gradually Replacing Auto-configuration

auto-configuration是非侵入性的(non-invasive)。在任何時候,您都可以開始定義自己的配置來替換auto-configuration的特定部分。例如,如果您添加自己的DataSource bean,默認的嵌入式數據庫支持就會後退(backs away)。

如果您需要了解當前應用的auto-configuration以及原因,請使用--debug模式(the --debug switch)啓動應用程序。這樣做可以爲選定的核心記錄器啓用調試日誌,並將條件報告記錄到控制檯。這樣做可以爲選定的核心記錄器啓用調試日誌,並將條件報告記錄到控制檯。

4.2. Disabling Specific Auto-configuration Classes

如果你發現某個你不想要的自動配置類正在被應用,你可以使用@SpringBootApplication的exclude屬性來禁用它們,如下所示:

@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
public class MyApplication {

}

5. Spring Beans and Dependency Injection

您可以自由地使用任何標準Spring Framework技術來定義bean及其注入的依賴項。我們通常建議使用構造函數注入來連接依賴和@ComponentScan來查找bean。

如果您按照上面建議的方式構造代碼(將應用程序類定位在頂級包中),您可以不帶任何參數添加@ComponentScan或使用隱式包含它的@SpringBootApplication註釋。您的所有應用程序組件(@Component、@Service、@Repository、@Controller,以及其他)都自動註冊爲Spring bean。

下面的例子展示了一個@Service Bean,它使用構造函數注入來獲得一個所需的RiskAssessor Bean:

import org.springframework.stereotype.Service;

@Service
public class MyAccountService implements AccountService {

    private final RiskAssessor riskAssessor;

    public MyAccountService(RiskAssessor riskAssessor) {
        this.riskAssessor = riskAssessor;
    }

    // ...

}

如果一個bean有多個構造函數,你需要用@Autowired標記你想讓Spring使用的構造函數:

import java.io.PrintStream;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class MyAccountService implements AccountService {

    private final RiskAssessor riskAssessor;

    private final PrintStream out;

    @Autowired
    public MyAccountService(RiskAssessor riskAssessor) {
        this.riskAssessor = riskAssessor;
        this.out = System.out;
    }

    public MyAccountService(RiskAssessor riskAssessor, PrintStream out) {
        this.riskAssessor = riskAssessor;
        this.out = out;
    }

    // ...

}

6. Using the @SpringBootApplication Annotation

許多Spring Boot開發者喜歡他們的應用使用自動配置(auto-configuration)、組件掃描(component scan),並且能夠在他們的“應用類(application class)”上定義額外的配置(configuration)。一個@SpringBootApplication註釋可以用來啓用這三個特性,即:

  • @EnableAutoConfiguration:啓用Spring Boot的自動配置機制(Spring Boot’s auto-configuration mechanism
  • @ComponentScan:在應用程序所在的包上啓用@Component scan(參見the best practices
  • @SpringBootConfiguration:允許在上下文中註冊額外的bean,或者導入額外的配置類。Spring標準@Configuration的替代方案,它可以幫助集成測試中的配置檢測(configuration detection)。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

// Same as @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan
@SpringBootApplication
public class MyApplication {

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

}

這些特性都不是強制性的,您可以選擇用它啓用的任何特性來替換這個單一的註釋。例如,你可能不想在你的應用程序中使用組件掃描(component scan)或配置屬性掃描(configuration properties scan):

import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Import;

@SpringBootConfiguration(proxyBeanMethods = false)
@EnableAutoConfiguration
@Import({ SomeConfiguration.class, AnotherConfiguration.class })
public class MyApplication {

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

}

在這個例子中,MyApplication和其他任何Spring Boot應用程序一樣,除了帶@Component註釋的類和帶@ConfigurationProperties註釋的類不會自動檢測到,用戶定義的bean會顯式導入(參見@Import)。

10. What to Read Next

現在,您應該瞭解如何使用Spring Boot以及應該遵循的一些最佳實踐。現在,您可以繼續深入瞭解Spring Boot的特定特性(specific Spring Boot features ),或者跳過它,閱讀Spring Boot的“生產準備(production ready)”方面的內容。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章