一文解析SpringBoot到底強(qiáng)在哪
1.SpringBoot簡(jiǎn)介
核心概念
SpringBoot是基于Spring框架的快速開發(fā)腳手架,采用約定優(yōu)于配置的理念,讓開發(fā)者能夠快速創(chuàng)建獨(dú)立運(yùn)行、生產(chǎn)級(jí)的Spring應(yīng)用程序。它通過簡(jiǎn)化配置和自動(dòng)裝配機(jī)制,大幅減少了傳統(tǒng)Spring應(yīng)用開發(fā)中的樣板代碼。
SpringBoot與Spring框架關(guān)系
或許很多人都認(rèn)為SpingBoot是Spring的替代品,其實(shí)并非這樣,SpringBoot是Spring框架的擴(kuò)展和增強(qiáng):
- 建立在Spring Framework之上
- 繼承了Spring的所有特性(IoC、AOP、事務(wù)管理等)
- 提供了更簡(jiǎn)單的配置和部署方式
- 目標(biāo)是讓Spring開發(fā)變得快速而簡(jiǎn)單
SpringBoot主要優(yōu)勢(shì)
- 簡(jiǎn)化配置:無需配置XML文件,自動(dòng)化配置機(jī)制
- 快速開發(fā):通過Starter依賴快速集成各種技術(shù)棧
- 內(nèi)嵌服務(wù)器:內(nèi)置Tomcat、Jetty或Undertow,無需單獨(dú)部署
- 生產(chǎn)就緒:內(nèi)置健康檢查、指標(biāo)收集和管理端點(diǎn)
- 微服務(wù)友好:天然支持微服務(wù)架構(gòu)
2.SpringBoot的核心特性
自動(dòng)配置
在我們創(chuàng)建一個(gè)初始的SpringBoot項(xiàng)目時(shí),在啟動(dòng)類上會(huì)有一個(gè)@SpringBootApplication注解,SpringBoot的自動(dòng)配置就是該注解中的@EnableAutoConfiguration所實(shí)現(xiàn)的
// SpringBoot自動(dòng)根據(jù)classpath中的jar包、已定義的bean等條件 // 自動(dòng)配置相應(yīng)的組件 @EnableAutoConfiguration // 啟用自動(dòng)配置 // 例如:當(dāng)classpath中有HSQLDB時(shí),自動(dòng)配置內(nèi)存數(shù)據(jù)庫
工作流程:
1.檢查classpath中的依賴
2.讀去spring.factories中的配置類
3.根據(jù)條件注解(@Conditional)決定是否創(chuàng)建Bean
4.應(yīng)用默認(rèn)屬性配置
起步依賴
起步依賴是一組預(yù)定義好的依賴描述符,它將某個(gè)功能相關(guān)的常見依賴打包在一起,開發(fā)者只需引入一個(gè) starter,即可獲得開發(fā)該功能所需的所有庫。
<!-- 示例:添加Web Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 數(shù)據(jù)庫 Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>特點(diǎn):
- 一站式依賴管理
- 版本自動(dòng)兼容
- 簡(jiǎn)化Maven/Gradle配置
內(nèi)嵌服務(wù)器
Spring Boot 內(nèi)置了多個(gè)流行的 Servlet 容器,允許開發(fā)者無需部署 WAR 包即可運(yùn)行 Web 應(yīng)用。
Spring Boot 支持以下三種主流的嵌入式服務(wù)器:
- Tomcat? : 默認(rèn)服務(wù)器(
spring-boot-starter-web自帶) - Jetty? : 輕量級(jí)高性能服務(wù)器
- Undertow? : 高性能非阻塞服務(wù)器(WildFly 使用)
如果你想使用其他的服務(wù)器,可以在xml文件中更改依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 排除 Tomcat -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 切換為 Jetty -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<!-- 或切換為 Undertow -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>3.SpringBoot常見注解
啟動(dòng)類相關(guān)注解
@SpringBootApplication(核心啟動(dòng)注解)
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}作用:組合注解,包含以下三個(gè)核心注解:
- @SpringBootConfiguration:標(biāo)記為配置類
- @EnableAutoConfiguration:?jiǎn)⒂米詣?dòng)配類
- @ComponentScan:組件掃描
常用參數(shù):
@SpringBootApplication(
scanBasePackages = "com.example", // 掃描包路徑
exclude = {DataSourceAutoConfiguration.class}, // 排除自動(dòng)配置
scanBasePackageClasses = {UserService.class} // 掃描特定類所在包
)@SpringBootTest(測(cè)試)
在src.text包下自動(dòng)為我們創(chuàng)建好的測(cè)試類
@SpringBootTest()
class ApplicationTests {
@Test
void contextLoads() {
//測(cè)試代碼
}
}配置相關(guān)注解
@Configuration? +@Bean
被@Configuration修飾的類是一個(gè)配置類,@Bean注解能夠?qū)⒈宦暶鞣椒ǖ姆祷刂捣湃雜pringIoC容器內(nèi)。
@Configuration
public class AppConfig {
@Bean
public ObjectMapper objectMapper() {
return new ObjectMapper();
}
}此時(shí)ObjectMapper類就會(huì)被SpringIoC容器管理。
@Autowried
@Autowried一般修飾在字段上實(shí)現(xiàn)依賴注入
@Component
public class OrderService {
@Autowired
private UserRepository userRepository; // 字段注入
@Autowired
private ProductRepository productRepository;
}@Value
@Value是用于注入配置值的注解
@Component
public class AppConfig {
// 1. 注入簡(jiǎn)單字符串
@Value("${app.name}")
private String appName;
// 2. 注入數(shù)字
@Value("${app.port:8080}") // 默認(rèn)值
private int port;
// 3. 注入布爾值
@Value("${app.enabled:true}")
private boolean enabled;
// 4. 注入浮點(diǎn)數(shù)
@Value("${app.version:1.0}")
private double version;
}Controller 相關(guān)注解
@RestController
@RestController與@Component作用類似,用于標(biāo)注這是一個(gè)Controller類
@RequestMapping
@RequestMapping用于將 HTTP 請(qǐng)求映射到控制器方法
- 標(biāo)記類時(shí)作用是作為http請(qǐng)求的路徑前綴
- 標(biāo)記方法時(shí)作用是直接映射到對(duì)應(yīng)路徑
類級(jí)別注解
@RestController
@RequestMapping("/api/v1/users") // 類級(jí)別路徑前綴
public class UserController {
// 完整路徑: /api/v1/users
@GetMapping
public List<User> getUsers() {
return userService.findAll();
}
// 完整路徑: /api/v1/users/{id}
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
return userService.findById(id);
}
}方法級(jí)別注解
@RestController
public class SimpleController {
// 映射到 /hello
@RequestMapping("/hello")
public String hello() {
return "Hello World";
}
// 映射到 /greet
@RequestMapping(value = "/greet", method = RequestMethod.GET)
public String greet() {
return "Greetings!";
}
}4.SpringBoot數(shù)據(jù)庫的集成
SpringBoot能通過簡(jiǎn)單的yaml配置實(shí)現(xiàn)數(shù)據(jù)庫的自動(dòng)連接
一個(gè)簡(jiǎn)單的數(shù)據(jù)配置:
spring:
datasource:
url: jdbc:mysql://localhost:3306/demo_db
username: demo_user
password: demo_pass
driver-class-name: com.mysql.cj.jdbc.Driver簡(jiǎn)單的CRUD示例(Spring Data JPA):
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
// 創(chuàng)建用戶
public User createUser(User user) {
return userRepository.save(user);
}
// 查詢用戶
public User getUserById(Long id) {
return userRepository.findById(id)
.orElseThrow(() -> new UserNotFoundException("用戶不存在"));
}
// 更新用戶
public User updateUser(Long id, User userDetails) {
User user = getUserById(id);
user.setUsername(userDetails.getUsername());
user.setEmail(userDetails.getEmail());
return userRepository.save(user);
}
// 刪除用戶
public void deleteUser(Long id) {
userRepository.deleteById(id);
}
// 查詢所有用戶
public List<User> getAllUsers() {
return userRepository.findAll();
}
}5.pringBoot RESTful API開發(fā)
REST架構(gòu)核心概念
REST(Representational State Transfer)是一種軟件架構(gòu)風(fēng)格,包含以下核心概念:
- 資源:一切皆資源,用URI標(biāo)識(shí)
- 表現(xiàn)層:資源的表現(xiàn)形式(JSON/XML等)
- 狀態(tài)轉(zhuǎn)移:通過HTTP方法操作資源
RESTful API設(shè)計(jì)規(guī)范
RESTful API是在這四種經(jīng)典Http方法的基礎(chǔ)上建立的
- GET方法:獲取資源
- POST方法:創(chuàng)建資源
- PUT方法:更新資源
- DELETE方法:刪除資源
經(jīng)典的使用示例如下:
@RestController
@RequestMapping("/api/v1/users")
public class UserController {
// GET /api/v1/users
@GetMapping
// 獲取所有用戶
// GET /api/v1/users/{id}
@GetMapping("/{id}")
// 根據(jù)ID獲取用戶
// POST /api/v1/users
@PostMapping
// 創(chuàng)建用戶
// PUT /api/v1/users/{id}
@PutMapping("/{id}")
// 更新用戶
// DELETE /api/v1/users/{id}
@DeleteMapping("/{id}")
// 刪除用戶
}到此這篇關(guān)于一文解析SpringBoot到底強(qiáng)在哪的文章就介紹到這了,更多相關(guān)SpringBoot全解析內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot中@Data注解的深度解析與實(shí)戰(zhàn)應(yīng)用
- Java?@SpringBootApplication注解深入解析
- SpringBoot中的@EnableConfigurationProperties注解詳細(xì)解析
- SpringBoot中的@ConfigurationProperties注解解析
- 解析SpringBoot中@Autowire注解的實(shí)現(xiàn)原理
- springboot中@RestController注解實(shí)現(xiàn)
- springboot的controller層的常用注解說明
- SpringBoot中使用@ControllerAdvice注解詳解
相關(guān)文章
Java中NoClassDefFoundError?和?ClassNotFoundException的區(qū)別
Java中NoClassDefFoundError和ClassNotFoundException的區(qū)別,從類繼承層次上來看,ClassNotFoundException是從Exception繼承的,所以ClassNotFoundException是一個(gè)檢查異常。具體詳情需要的朋友可以參考下面文章內(nèi)容2022-06-06
Java中Collections.emptyList()的注意事項(xiàng)
這篇文章主要給大家介紹了關(guān)于Java中Collections.emptyList()的注意事項(xiàng),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
mybatis-plus如何修改日志只打印SQL語句不打印查詢結(jié)果
這篇文章主要介紹了mybatis-plus如何修改日志只打印SQL語句不打印查詢結(jié)果問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
Java利用反射實(shí)現(xiàn)框架類的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于Java利用反射實(shí)現(xiàn)框架類的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
詳解Java的Hibernat框架中的Map映射與SortedMap映射
這篇文章主要介紹了Java的Hibernat框架中的Map映射與SortedMap映射,Hibernat是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下2015-12-12
Springboot中如何自動(dòng)轉(zhuǎn)JSON輸出
這篇文章主要介紹了Springboot中如何自動(dòng)轉(zhuǎn)JSON輸出,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06

