《Spring Boot官方文件》16. 自動配置
Spring Boot的自動配置會嘗試根據你新增進來的jar依賴來自動配置你的Spring應用。例如,如果HSQLDB在你的classpath路徑上,你沒有手動配置任何資料庫連線實體類,我們還會自動配置記憶體資料庫。
你可以有選擇的實現自動配置,可以向 @Configuration上新增@EnableAutoConfiguration或者@SpringBootApplication註解來實現。
你應該只新增一個@EnableAutoConfiguration註解。我們通常建議你把它新增到你的主要 @Configuration類上。
自動配置是非入侵式的,任何時候你都可以使用你自定義的配置來覆蓋自動配置的特定部分。例如,如果你要新增自己的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 物件,表明以後該物件不能被改變。