一文解析SpringBoot到底强在哪
作者:晔子yy
1.SpringBoot简介
核心概念
SpringBoot是基于Spring框架的快速开发脚手架,采用约定优于配置的理念,让开发者能够快速创建独立运行、生产级的Spring应用程序。它通过简化配置和自动装配机制,大幅减少了传统Spring应用开发中的样板代码。
SpringBoot与Spring框架关系
或许很多人都认为SpingBoot是Spring的替代品,其实并非这样,SpringBoot是Spring框架的扩展和增强:
- 建立在Spring Framework之上
- 继承了Spring的所有特性(IoC、AOP、事务管理等)
- 提供了更简单的配置和部署方式
- 目标是让Spring开发变得快速而简单
SpringBoot主要优势
- 简化配置:无需配置XML文件,自动化配置机制
- 快速开发:通过Starter依赖快速集成各种技术栈
- 内嵌服务器:内置Tomcat、Jetty或Undertow,无需单独部署
- 生产就绪:内置健康检查、指标收集和管理端点
- 微服务友好:天然支持微服务架构
2.SpringBoot的核心特性
自动配置
在我们创建一个初始的SpringBoot项目时,在启动类上会有一个@SpringBootApplication注解,SpringBoot的自动配置就是该注解中的@EnableAutoConfiguration所实现的
// SpringBoot自动根据classpath中的jar包、已定义的bean等条件 // 自动配置相应的组件 @EnableAutoConfiguration // 启用自动配置 // 例如:当classpath中有HSQLDB时,自动配置内存数据库
工作流程:
1.检查classpath中的依赖
2.读去spring.factories中的配置类
3.根据条件注解(@Conditional)决定是否创建Bean
4.应用默认属性配置
起步依赖
起步依赖是一组预定义好的依赖描述符,它将某个功能相关的常见依赖打包在一起,开发者只需引入一个 starter,即可获得开发该功能所需的所有库。
<!-- 示例:添加Web Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 数据库 Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>特点:
- 一站式依赖管理
- 版本自动兼容
- 简化Maven/Gradle配置
内嵌服务器
Spring Boot 内置了多个流行的 Servlet 容器,允许开发者无需部署 WAR 包即可运行 Web 应用。
Spring Boot 支持以下三种主流的嵌入式服务器:
- Tomcat : 默认服务器(
spring-boot-starter-web自带) - Jetty : 轻量级高性能服务器
- Undertow : 高性能非阻塞服务器(WildFly 使用)
如果你想使用其他的服务器,可以在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常见注解
启动类相关注解
@SpringBootApplication(核心启动注解)
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}作用:组合注解,包含以下三个核心注解:
- @SpringBootConfiguration:标记为配置类
- @EnableAutoConfiguration:启用自动配类
- @ComponentScan:组件扫描
常用参数:
@SpringBootApplication(
scanBasePackages = "com.example", // 扫描包路径
exclude = {DataSourceAutoConfiguration.class}, // 排除自动配置
scanBasePackageClasses = {UserService.class} // 扫描特定类所在包
)@SpringBootTest(测试)
在src.text包下自动为我们创建好的测试类
@SpringBootTest()
class ApplicationTests {
@Test
void contextLoads() {
//测试代码
}
}配置相关注解
@Configuration +@Bean
被@Configuration修饰的类是一个配置类,@Bean注解能够将被声明方法的返回值放入springIoC容器内。
@Configuration
public class AppConfig {
@Bean
public ObjectMapper objectMapper() {
return new ObjectMapper();
}
}此时ObjectMapper类就会被SpringIoC容器管理。
@Autowried
@Autowried一般修饰在字段上实现依赖注入
@Component
public class OrderService {
@Autowired
private UserRepository userRepository; // 字段注入
@Autowired
private ProductRepository productRepository;
}@Value
@Value是用于注入配置值的注解
@Component
public class AppConfig {
// 1. 注入简单字符串
@Value("${app.name}")
private String appName;
// 2. 注入数字
@Value("${app.port:8080}") // 默认值
private int port;
// 3. 注入布尔值
@Value("${app.enabled:true}")
private boolean enabled;
// 4. 注入浮点数
@Value("${app.version:1.0}")
private double version;
}Controller 相关注解
@RestController
@RestController与@Component作用类似,用于标注这是一个Controller类
@RequestMapping
@RequestMapping用于将 HTTP 请求映射到控制器方法
- 标记类时作用是作为http请求的路径前缀
- 标记方法时作用是直接映射到对应路径
类级别注解
@RestController
@RequestMapping("/api/v1/users") // 类级别路径前缀
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);
}
}方法级别注解
@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数据库的集成
SpringBoot能通过简单的yaml配置实现数据库的自动连接
一个简单的数据配置:
spring:
datasource:
url: jdbc:mysql://localhost:3306/demo_db
username: demo_user
password: demo_pass
driver-class-name: com.mysql.cj.jdbc.Driver简单的CRUD示例(Spring Data JPA):
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
// 创建用户
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开发
REST架构核心概念
REST(Representational State Transfer)是一种软件架构风格,包含以下核心概念:
- 资源:一切皆资源,用URI标识
- 表现层:资源的表现形式(JSON/XML等)
- 状态转移:通过HTTP方法操作资源
RESTful API设计规范
RESTful API是在这四种经典Http方法的基础上建立的
- GET方法:获取资源
- POST方法:创建资源
- PUT方法:更新资源
- DELETE方法:删除资源
经典的使用示例如下:
@RestController
@RequestMapping("/api/v1/users")
public class UserController {
// GET /api/v1/users
@GetMapping
// 获取所有用户
// GET /api/v1/users/{id}
@GetMapping("/{id}")
// 根据ID获取用户
// POST /api/v1/users
@PostMapping
// 创建用户
// PUT /api/v1/users/{id}
@PutMapping("/{id}")
// 更新用户
// DELETE /api/v1/users/{id}
@DeleteMapping("/{id}")
// 删除用户
}到此这篇关于一文解析SpringBoot到底强在哪的文章就介绍到这了,更多相关SpringBoot全解析内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
