一文解析SpringBoot到底强在哪

 更新时间:2026年01月30日 11:29:22   作者:晔子yy  
SpringBoot是基于Spring框架的快速开发脚手架,采用约定优于配置的理念,让开发者能够快速创建独立运行、生产级的Spring应用程序,它通过简化配置和自动装配机制,大幅减少了传统Spring应用开发中的样板代码,下面通过本文解析SpringBoot到底强在哪,感兴趣的朋友一起看看吧

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全解析内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中的2种集合排序方法介绍

    Java中的2种集合排序方法介绍

    这篇文章主要介绍了Java中的2种集合排序方法介绍,本文直接给出代码,相关说明请看代码中的注释,需要的朋友可以参考下
    2014-10-10
  • Java中NoClassDefFoundError 和 ClassNotFoundException的区别

    Java中NoClassDefFoundError 和 ClassNotFoundException的区别

    Java中NoClassDefFoundError和ClassNotFoundException的区别,从类继承层次上来看,ClassNotFoundException是从Exception继承的,所以ClassNotFoundException是一个检查异常。具体详情需要的朋友可以参考下面文章内容
    2022-06-06
  • Java中Collections.emptyList()的注意事项

    Java中Collections.emptyList()的注意事项

    这篇文章主要给大家介绍了关于Java中Collections.emptyList()的注意事项,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Java中的Timer与TimerTask原理详解

    Java中的Timer与TimerTask原理详解

    这篇文章主要介绍了Java中的Timer与TimerTask原理详解,timerTask本身没什么意义,只是和timer集合操作的一个对象,实现它就必然有对应的run方法,以被调用,他甚至于根本不需要实现Runnable,需要的朋友可以参考下
    2023-07-07
  • Java mysql特殊形式的查询语句详解

    Java mysql特殊形式的查询语句详解

    这篇文章主要介绍了Java mysql特殊形式的查询,包括子查询和联合查询、自身连接查询问题,本文通过sql语句给大家介绍的非常详细,需要的朋友可以参考下
    2022-02-02
  • mybatis-plus如何修改日志只打印SQL语句不打印查询结果

    mybatis-plus如何修改日志只打印SQL语句不打印查询结果

    这篇文章主要介绍了mybatis-plus如何修改日志只打印SQL语句不打印查询结果问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • Java利用反射实现框架类的方法实例

    Java利用反射实现框架类的方法实例

    这篇文章主要给大家介绍了关于Java利用反射实现框架类的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • 详解Java的Hibernat框架中的Map映射与SortedMap映射

    详解Java的Hibernat框架中的Map映射与SortedMap映射

    这篇文章主要介绍了Java的Hibernat框架中的Map映射与SortedMap映射,Hibernat是Java的SSH三大web开发框架之一,需要的朋友可以参考下
    2015-12-12
  • Java 如何使用正则表达式去除前导0

    Java 如何使用正则表达式去除前导0

    这篇文章主要介绍了Java 使用正则表达式去除前导0的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Springboot中如何自动转JSON输出

    Springboot中如何自动转JSON输出

    这篇文章主要介绍了Springboot中如何自动转JSON输出,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06

最新评论