1. 程式人生 > >《Spring Boot官方文件》16. 自動配置

《Spring Boot官方文件》16. 自動配置

16. 自動配置

Spring Boot的自動配置會嘗試根據你新增進來的jar依賴來自動配置你的Spring應用。例如,如果HSQLDB在你的classpath路徑上,你沒有手動配置任何資料庫連線實體類,我們還會自動配置記憶體資料庫。

你可以有選擇的實現自動配置,可以向 @Configuration上新增@EnableAutoConfiguration或者@SpringBootApplication註解來實現。

你應該只新增一個@EnableAutoConfiguration註解。我們通常建議你把它新增到你的主要 @Configuration類上。

16.1 逐步覆蓋自動配置

自動配置是非入侵式的,任何時候你都可以使用你自定義的配置來覆蓋自動配置的特定部分。例如,如果你要新增自己的DataSource bean,預設的內嵌資料庫會無效。

如果你需要查詢當前應用的自動配置,你可以啟動應用時加上–debug開關。它會為核心日誌記錄器開啟debug日誌記錄,並且會列印自動配置日誌資訊到控制檯。

16.2禁用特定自動配置

如果你發現正在應用的特定自動配置不是你想要的,你可以使用@EnableAutoConfiguration的排除屬性來禁用它們。

import org.springframework.boot.autoconfigure.*;
import org.springframework.boot.autoconfigure.jdbc.*;
import org.springframework.context.annotation.*;
@Configuration
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class}) public class MyConfiguration {
}

如果這個類不在classpath路徑下,你可以使用該註解的excludeName屬性以及指定全限定名 來替代。最終,你也可以控制自動配置類的列表來額除spring.autoconfigure.exclude屬性。

你可以通過註解級別以及使用屬性來定義排除項。

17. Spring Beans和依賴注入

你可以自由使用任何標準Spring框架技術來定義你的beas以及它們的依賴。簡單來說,我們通常使用@ComponentScan 來發現你的beans,並且配合@Autowired構造器來更好的注入。

如果你在構造程式碼時使用上面建議的方式(在根包下定位你的應用類),你可以用@ComponentScan註解,無需任何引數。你所有的應用元件(@Component, @Service, @Repository, @Controller 等等)都會作為Spring Beans來註冊。

下面的例子是使用@Service Bean構造器注入用於獲取必要的RiskAssessor Bean。

package com.example.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service public class DatabaseAccountService implements AccountService {

private final RiskAssessor riskAssessor;

@Autowired public DatabaseAccountService(RiskAssessor riskAssessor) {

this.riskAssessor = riskAssessor;

}

// …

}

請注意使用構造器注入允許使用final標記riskAssessor 物件,表明以後該物件不能被改變。