Springboot核心機(jī)制詳細(xì)介紹
Spring Boot 的核心機(jī)制主要包括自動(dòng)配置、起步依賴、主類和運(yùn)行器、以及嵌入式服務(wù)器等。下面我們將詳細(xì)介紹這些核心機(jī)制,來對(duì)Spring Boot有一個(gè)初步了解。
1. 自動(dòng)配置 (Auto-configuration)
自動(dòng)配置是 Spring Boot 最重要的特性之一,它能夠根據(jù)類路徑中的依賴自動(dòng)配置 Spring 應(yīng)用。Spring Boot 通過一系列的 @Conditional 注解來決定哪些配置類應(yīng)該被加載。
1.1 @SpringBootApplication 注解
@SpringBootApplication 是一個(gè)組合注解,包含了以下幾個(gè)注解:
@Configuration:標(biāo)記該類為配置類。@EnableAutoConfiguration:啟用自動(dòng)配置。@ComponentScan:啟用組件掃描,自動(dòng)發(fā)現(xiàn)和注冊(cè) Spring 組件。
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}1.2 @EnableAutoConfiguration 注解
@EnableAutoConfiguration 注解會(huì)觸發(fā)自動(dòng)配置機(jī)制。Spring Boot 會(huì)在類路徑中查找?guī)в?@Configuration 注解的類,并根據(jù)條件(如類路徑中的依賴)決定是否應(yīng)用這些配置。
1.3 條件注解 (@Conditional)
Spring Boot 使用各種 @Conditional 注解來控制配置類的加載條件。常見的條件注解包括:
@ConditionalOnClass:當(dāng)類路徑中存在指定類時(shí)生效。@ConditionalOnMissingBean:當(dāng)容器中不存在某個(gè) Bean 時(shí)生效。@ConditionalOnProperty:當(dāng)配置文件中存在指定屬性時(shí)生效。
2. 起步依賴 (Starter Dependencies)
起步依賴是 Spring Boot 提供的一組依賴管理,旨在簡化項(xiàng)目配置。每個(gè)起步依賴都包含了一組相關(guān)的依賴項(xiàng),使得開發(fā)者只需聲明一個(gè)依賴就能引入多個(gè)相關(guān)的庫。
2.1 常見的起步依賴
spring-boot-starter-web:包含構(gòu)建 Web 應(yīng)用所需的依賴,如 Spring MVC 和嵌入式 Tomcat。spring-boot-starter-data-jpa:包含構(gòu)建數(shù)據(jù)訪問層所需的依賴,如 Spring Data JPA 和 Hibernate。spring-boot-starter-test:包含測(cè)試所需的依賴,如 JUnit、Mockito 等。
2.2 Maven 依賴示例
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>3. 主類和運(yùn)行器 (Main Class and Runners)
Spring Boot 應(yīng)用通常有一個(gè)主類,該類包含 main 方法,用于啟動(dòng)應(yīng)用。
3.1 主類
主類通常使用 @SpringBootApplication 注解,并包含 main 方法。
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}3.2 SpringApplication 類
SpringApplication 類負(fù)責(zé)啟動(dòng) Spring Boot 應(yīng)用。它會(huì)執(zhí)行以下任務(wù):
初始化 Spring 應(yīng)用上下文。加載配置文件。執(zhí)行自動(dòng)配置。啟動(dòng)嵌入式服務(wù)器(如果適用)。 3.3 運(yùn)行器 (ApplicationRunner 和 CommandLineRunner)
你可以實(shí)現(xiàn) ApplicationRunner 或 CommandLineRunner 接口,在應(yīng)用啟動(dòng)后執(zhí)行一些初始化操作。
@Component
public class MyRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("Application started!");
}
}4. 嵌入式服務(wù)器 (Embedded Server)
Spring Boot 支持多種嵌入式 Web 服務(wù)器,如 Tomcat、Jetty 和 Undertow。默認(rèn)情況下,Spring Boot 使用 Tomcat 作為嵌入式服務(wù)器。
4.1 嵌入式 Tomcat
Spring Boot 通過 spring-boot-starter-web 依賴自動(dòng)包含 Tomcat 的相關(guān)依賴。你可以通過配置文件來定制服務(wù)器的端口、上下文路徑等屬性。
4.2 自定義服務(wù)器
如果你希望使用其他服務(wù)器,可以通過排除默認(rèn)的 Tomcat 依賴并添加其他服務(wù)器的依賴來實(shí)現(xiàn)。
Maven 示例
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>5. 配置文件 (Configuration Files)
Spring Boot 支持多種配置文件格式,如 application.properties 和 application.yml。這些文件用于配置應(yīng)用的各種屬性。
5.1 application.properties 示例
server.port=8080 spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root spring.datasource.password=root
5.2 application.yml 示例
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: root6. 總結(jié)
Spring Boot 的核心機(jī)制包括自動(dòng)配置、起步依賴、主類和運(yùn)行器、以及嵌入式服務(wù)器。這些機(jī)制共同作用,使得 Spring Boot 應(yīng)用開發(fā)變得更加簡單和高效。通過自動(dòng)配置,Spring Boot 可以根據(jù)類路徑中的依賴自動(dòng)配置應(yīng)用;通過起步依賴,開發(fā)者可以輕松管理項(xiàng)目依賴;通過主類和運(yùn)行器,應(yīng)用可以方便地啟動(dòng)和執(zhí)行初始化操作;通過嵌入式服務(wù)器,應(yīng)用可以作為一個(gè)獨(dú)立的 JAR 文件運(yùn)行。
就是這樣啦,后面筆者還會(huì)介紹怎么來定制化的寫一個(gè)自己的啟動(dòng)類SpringApplication,來做一些定制化的動(dòng)作。
到此這篇關(guān)于Springboot核心機(jī)制的文章就介紹到這了,更多相關(guān)Springboot核心機(jī)制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot默認(rèn)包掃描機(jī)制與默認(rèn)配置文件詳解
- SpringBoot默認(rèn)包掃描機(jī)制及@ComponentScan指定掃描路徑詳解
- SpringBoot整合RabbitMQ實(shí)現(xiàn)消息確認(rèn)機(jī)制
- SpringBoot整合spring-retry實(shí)現(xiàn)接口請(qǐng)求重試機(jī)制及注意事項(xiàng)
- SpringBoot通知機(jī)制的實(shí)現(xiàn)方式
- SpringBoot + WebSocket 實(shí)現(xiàn)答題對(duì)戰(zhàn)匹配機(jī)制案例詳解
- SpringBoot全局異常處理機(jī)制和配置攔截器方式
相關(guān)文章
Springboot 實(shí)現(xiàn)數(shù)據(jù)庫備份還原的方法
這篇文章主要介紹了Springboot 實(shí)現(xiàn)數(shù)據(jù)庫備份還原的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
解決springboot項(xiàng)目啟動(dòng)報(bào)錯(cuò)Error creating bean with&nb
這篇文章主要介紹了解決springboot項(xiàng)目啟動(dòng)報(bào)錯(cuò)Error creating bean with name dataSourceScriptDatabaseInitializer問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助2024-03-03
Collections.shuffle()方法實(shí)例解析
這篇文章主要介紹了Collections.shuffle()方法實(shí)例解析,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
Slf4j+logback實(shí)現(xiàn)JSON格式日志輸出方式
這篇文章主要介紹了Slf4j+logback實(shí)現(xiàn)JSON格式日志輸出方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
Gradle中Maven倉庫配置的實(shí)現(xiàn)步驟
在Java/Kotlin 項(xiàng)目的構(gòu)建過程中,依賴管理是核心環(huán)節(jié)之一,而Maven 倉庫是最常見的依賴來源,本文就來詳細(xì)的介紹一下Gradle中Maven倉庫配置,感興趣的可以了解一下2025-09-09
Java模擬HTTP Get Post請(qǐng)求實(shí)現(xiàn)論壇自動(dòng)回帖功能
這篇文章主要介紹了Java模擬HTTP Get Post請(qǐng)求實(shí)現(xiàn)論壇自動(dòng)回帖功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09
Java中的java.lang.reflect.Type簡介
在 Java 中,java.lang.reflect.Type 是一個(gè)接口,代表所有類型的通用超類型,它包括原始類型、參數(shù)化類型、數(shù)組類型、類型變量和基本類型,本文給大家講解Java中的java.lang.reflect.Type是什么,需要的朋友可以參考下2024-06-06

