<div>
<a class="article-series-header" href="javascript:void(0);">該文章是系列的一部分</a>
<div>
<div>
• Spring Core 註解
<br>
• Spring Web 註解
<br>
<div>
• Spring Boot 註解 (當前文章)
</div>
• Spring Scheduling 註解
<br>
• Spring Data 註解
<br>
• Spring Bean 註解
<br>
</div>
<!-- end of article series inner -->
</div>
<!-- .article-series-links -->
</div>
1. 概述
Spring Boot 通過其自動配置功能,簡化了 Spring 的配置。
在本快速教程中,我們將探索來自 <em >org.springframework.boot.autoconfigure</em> 和 <em >org.springframework.boot.autoconfigure.condition</em> 包的註解。
2. <em @SpringBootApplication>
我們使用此註解來標記 Spring Boot 應用的主類:
@SpringBootApplication
class VehicleFactoryApplication {
public static void main(String[] args) {
SpringApplication.run(VehicleFactoryApplication.class, args);
}
}@SpringBootApplication 封裝了 @Configuration、@EnableAutoConfiguration 和 @ComponentScan 註解及其默認屬性。
3. @EnableAutoConfiguration
@EnableAutoConfiguration,正如其名稱所示,啓用自動配置。這意味着 Spring Boot 會在其 classpath 上查找自動配置 Bean 並自動應用它們。
請注意,必須使用此註解與 @Configuration 一起使用:
@Configuration
@EnableAutoConfiguration
class VehicleFactoryConfig {}4. 自定義配置條件
通常,當我們編寫自定義的自動配置時,我們希望 Spring 能夠根據條件來使用它們。我們可以通過本部分中提供的註解來實現這一點。
我們可以將這些註解放置在 @Configuration 類或 @Bean 方法上。
在下一部分中,我們將僅介紹每個條件的基本概念。有關更多信息,請訪問這篇文章。
4.1. <em @ConditionalOnClass</em> 和 <em @ConditionalOnMissingClass</em>
使用這些條件,Spring 僅會在註解中指定的 參數類存在/不存在 時才使用標記的自動配置 Bean:
@Configuration
@ConditionalOnClass(DataSource.class)
class MySQLAutoconfiguration {
//...
}4.2. <em @ConditionalOnBean</em> 和 <em @ConditionalOnMissingBean</em>
我們可以使用這些註解,當我們需要根據特定 Bean 的 存在或不存在 來定義條件時:
@Bean
@ConditionalOnBean(name = "dataSource")
LocalContainerEntityManagerFactoryBean entityManagerFactory() {
// ...
}4.3. <em @ConditionalOnProperty</em>
通過此註解,我們可以設置基於 屬性值的條件。
@Bean
@ConditionalOnProperty(
name = "usemysql",
havingValue = "local"
)
DataSource dataSource() {
// ...
}4.4. <em @ConditionalOnResource</em>
我們可以讓 Spring 只在特定 資源存在時才使用定義:
@ConditionalOnResource(resources = "classpath:mysql.properties")
Properties additionalProperties() {
// ...
}4.5. <em @ConditionalOnWebApplication/> 和 <em @ConditionalOnNotWebApplication/>
使用這些註解,我們可以根據當前是或不是一個 Web 應用程序來創建條件:
@ConditionalOnWebApplication
HealthCheckController healthCheckController() {
// ...
}4.6. <em @ConditionalExpression</em>>
我們可以使用此註解在更復雜的場景中使用。Spring會在SpEL表達式評估為true時使用所標記的定義。
@Bean
@ConditionalOnExpression("${usemysql} && ${mysqlserver == 'local'}")
DataSource dataSource() {
// ...
}4.7. <em @Conditional</em>
對於更復雜的條件,我們可以創建一個類來評估 自定義條件。 我們告訴 Spring 使用這個自定義條件,通過 <em @Conditional</em>:
@Conditional(HibernateCondition.class)
Properties additionalProperties() {
//...
}5. 結論
在本文中,我們瞭解瞭如何微調自動配置過程以及為自定義自動配置 Bean 提供條件。