啟動時
了解 @SpringBootApplication 做了哪些事
@SpringBootApplication
public class DemoJApplication {
public static void main(String[] args) {
SpringApplication.run(DemoJApplication.class, args);
}
}
其中包含
@EnableAutoConfiguration - 自動配置
@SpringBootConfiguration
@Configuration - 配置 Springboot
@ComponentScan - 掃描元件
🌟自動配置🌟
透過 @EnableAutoConfiguration 配置,裝配所有會用的 Bean, 並創建一個 Spring 的 ApplicationContext 實例。
讓 Spring Boot 根據 classpath 中的jar包依賴進行自動配置。
主要透過 @Import(AutoConfigurationImportSelector.class),使其能夠完成自動配置的功效。
AutoConfigurationImportSelector 使用 SpringFramework 的 SpringFactoriesLoader 支持。
Spring SPI可以將所有 @Configuration 並符合的配置,將其加載到 springboot 創建並使用的 IOC 容器。
Spring Boot 將自動掃描 @SpringBootApplication 所在類別的同層 package 以及下層 package 裡的Bean,所以入口類建議就配置在 grounpID + arctifactID 組合的包名下。
查看所有已配置的 Bean
@SpringBootApplication
public class DemoJApplication {
public static void main(String[] args) {
//取出 ApplicationContext
ApplicationContext ctx =
SpringApplication.run(DemoJApplication.class, args);
//透過其方法 getBeanDefinitionNames
String[] beanNames = ctx.getBeanDefinitionNames();
//列出所有取得的 Bean名稱
Arrays.sort(beanNames);
for (String beanName : beanNames) {
System.out.println(beanName);
}
}
}
查看在什麼地方註冊
透過 JVM 加入 -Ddebug=true
作為參數傳遞即可。
Condition 註解引入Bean
搭配 Maven 引入的 jar 包,自行配置。
在官方 springboot 中,只要已經在 org.springframework.boot.autoconfigure 就會自動配置,若不含在裡面,就必須自行建立 bean 使其能夠被偵測到。
Condition 註解🍀 配置 Springboot
透過 @SpringBootConfiguration 配置
標註此類別為 Springboot 的 @Configuration,為了明確表達意圖,其功能同理。
唯一差別在於 @SpringBootConfiguration 能為其自動定位,在單元或集成測試特別有用。
同樣也可以在此類別加入 @Bean,也會被偵測到,因為有 @Configuration。
🍀 掃描元件
透過 @ComponentScan 配置
掃描所有的標註 @Component 的元件。
若未定義指定位置,會掃描其底下的所有 package 。
引入的 Maven 如何 AutoConfig
Parent以 Spring-MVC Maven 為例:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
透過搭配 @Conditional 註解,依據配置,在滿足其條件之後才會加載進 context 。
Condition 註解參考資料
Last updated
Was this helpful?