1. 場景啟動器
Spring Boot的自動配置原理中不可或缺的就是那些已經定義好的場景啟動器,只要匯入某個場景啟動器我們的應用就擁有了該場景下的一些核心Bean,有利于快速開發,比如引入Web的場景啟動器:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
我們就可以快速開發Web服務,Spring Boot官方提供了眾多的場景啟動器供開發者使用,但這些場景啟動器也并不能滿足開發者各式各樣的需求,比如Dubbo很好用,我們希望能夠有一個Dubbo的場景啟動器能夠快速使用Dubbo的功能,因此阿里就推出了dubbo-spring-boot-starter的場景啟動器,這也是延續了Spring的整合一切的思想,
2. 命名規則
場景啟動器的命名其實本身可以隨意命名,但在JAVA領域總有一些約定,比如類名、方法名要見名知意,Spring Boot官方自己出產的場景啟動器都是以spring-boot-starter開頭再加模塊名稱,比如:
- spring-boot-starter-web
- spring-boot-starter-jdbc
- spring-boot-starter-cache
非官方出產的場景啟動器都是以模塊名稱開頭再加spring-boot-starter,比如:
- mybatis-spring-boot-starter
- dubbo-spring-boot-starter
3. 開發規則
場景啟動器幫我們做了什么?
- 場景啟動器幫我們引入了某個場景下所需要的依賴JAR
- 提供了自動配置類給IOC容器注入該場景下的核心Bean
其中自動配置類會用到很多條件注解來判斷是否符合場景,Spring Boot提供的條件注解如下:
| 注解 | 作用 |
|---|---|
| @ConditionalOnBean | 判斷某個Bean是否存在 |
| @ConditionalOnClass | 判斷某個class是否存在 |
| @ConditionalOnExpression | 判斷某個運算式是否成立 |
| @ConditionalOnJava | 判斷是否是運行的指定版本的JAVA |
| @ConditionalOnJndi | 判斷指定資源是否是通過JNDI加載 |
| @ConditionalOnMissingBean | 判斷某個Bean是否不存在 |
| @ConditionalOnMissingClass | 判斷某個class是否不存在 |
| @ConditionOnWebApplication | 判斷是否是Web應用 |
| @ConditionOnProperty | 判斷某個配置是否是指定的內容 |
| @Conditional | 設定實作Condition介面的類,實作自定義條件 |
例如快取場景啟動器的自動配置類CacheAutoConfiguration如下:

4. 自定義場景啟動器
定義一個場景啟動器,名稱為:hello-spring-boot-starter,該啟動器提供一個核心Bean,名稱為helloBean,可以輸出啟動器的名稱,工程結構如下:

4.1 開發場景啟動器
- 在【hello-spring-boot-starter】工程中的pom檔案中引入如下依賴:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.3.5.RELEASE</version>
</dependency>
</dependencies>
- 在【hello-spring-boot-starter】工程中創建核心類,類名稱:HelloBean,具體內容如下:
public class HelloBean
{
/**
* 輸出場景啟動器名稱
*/
public void printHello()
{
System.out.println("hello-spring-boot-starter");
}
}
- 在【hello-spring-boot-starter】工程中創建自動配置類,類名稱:HelloAutoConfiguration,只有在Web應用中才生效,內容如下:
@Configuration
@ConditionalOnWebApplication // 在Web應用中才可以
public class HelloAutoConfiguration
{
@Bean
public HelloBean helloBean()
{
return new HelloBean();
}
}
- 在【hello-spring-boot-starter】工程中的META-INF目錄下創建spring.factories檔案,內容如下:
// 讓Spring Boot啟動時自動給我們裝配
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.xxxx.hello.HelloAutoConfiguration
4.2 應用場景啟動器
- 在【spring-boot-web-example】工程中的pom檔案中引入web和自定義的hello場景啟動器,內容如下:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.xxxx</groupId>
<artifactId>hello-spring-boot-starter</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
- 在【spring-boot-web-example】工程中新建應用程式啟動類,類名稱:SpringServiceApplication,內容如下:
@SpringBootApplication
public class SpringServiceApplication implements ApplicationRunner
{
@Autowired
private HelloBean helloBean;
public static void main(String[] args)
{
// 啟動應用程式
SpringApplication.run(SpringServiceApplication.class);
}
@Override
public void run(ApplicationArguments args) throws Exception
{
// 列印自定義場景啟動器名稱
helloBean.printHello();
}
}
- 啟動應用測驗如下:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/433341.html
標籤:其他
上一篇:利用現代技術研發的人工智能
下一篇:【電商秒殺專案】專案總結:Redis 實作分布式 Session、用戶認證、超賣、系統壓測、RabbitMQ 異步下單、介面限流
