Spring Boot 详解(从入门到原理)

一、什么是 Spring Boot

Spring Boot 是基于 Spring Framework 的快速开发框架,核心目标是:

👉 让开发更简单(约定优于配置)


核心特点

  1. 开箱即用(Starter 依赖)

  2. 自动配置(Auto Configuration)

  3. 内嵌服务器(Tomcat/Jetty)

  4. 零 XML 配置

  5. 快速开发 + 部署


二、Spring Boot 核心思想


1. 约定优于配置

传统 Spring:

XML 复制代码
<bean id="userService" class="xxx.UserService"/>

Spring Boot:

java 复制代码
@Service
public class UserService {}

👉 不再需要大量 XML


2. Starter 依赖机制

例如:

XML 复制代码
spring-boot-starter-web

它会自动帮你引入:

  • Spring MVC

  • Jackson

  • Tomcat

👉 本质:依赖整合


三、Spring Boot 项目结构


标准结构

复制代码
com.example.demo
 ├── controller
 ├── service
 ├── dao
 ├── entity
 └── DemoApplication.java

启动类

java 复制代码
@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

@SpringBootApplication 解析(核心)

相当于:

java 复制代码
@Configuration
@EnableAutoConfiguration
@ComponentScan

四、自动配置原理(重点!面试必问)


核心注解

java 复制代码
@EnableAutoConfiguration

自动配置流程

复制代码
启动 → 加载配置类 → 条件判断 → 注入 Bean

核心文件

复制代码
META-INF/spring.factories

Spring Boot 启动时:

👉 会加载所有自动配置类


条件注解(关键)

常见:

java 复制代码
@ConditionalOnClass
@ConditionalOnMissingBean
@ConditionalOnProperty

示例

java 复制代码
@ConditionalOnClass(DataSource.class)
public class DataSourceAutoConfiguration {
}

👉 类存在才加载


五、Spring Boot 配置文件


1. application.yml(推荐)

复制代码
server:
  port: 8080

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test
    username: root
    password: 123456

2. 配置绑定

java 复制代码
@ConfigurationProperties(prefix = "spring.datasource")
public class DataSourceConfig {
    private String url;
}

3. @Value 注入

java 复制代码
@Value("${server.port}")
private int port;

六、Spring Boot Web 开发


1. Controller

java 复制代码
@RestController
@RequestMapping("/user")
public class UserController {

    @GetMapping("/test")
    public String test() {
        return "hello";
    }
}

2. 请求流程

复制代码
请求 → DispatcherServlet → Controller → Service → 返回结果

👉 核心依赖:Spring MVC


七、内嵌服务器原理


Spring Boot 默认使用:

  • Tomcat

启动流程

复制代码
main()
 → SpringApplication.run()
 → 创建容器
 → 启动 Tomcat

优势

  1. 不需要外部部署

  2. 可打包成 jar 运行

    java -jar app.jar


八、Spring Boot 常用注解


1. 组件注入

注解 作用
@Component 普通组件
@Service 业务层
@Repository DAO 层
@Controller 控制层

2. Web 注解

注解 作用
@RestController 返回 JSON
@RequestMapping 路径映射
@GetMapping GET 请求
@PostMapping POST 请求

3. 注入相关

java 复制代码
@Autowired
@Resource

九、Spring Boot 整合 MyBatis


依赖

XML 复制代码
spring-boot-starter-jdbc
mybatis-spring-boot-starter

Mapper

java 复制代码
@Mapper
public interface UserMapper {
    List<User> selectAll();
}

配置

复制代码
mybatis:
  mapper-locations: classpath:mapper/*.xml

十、Spring Boot 启动流程(源码级)


核心步骤

复制代码
1. 创建 SpringApplication
2. 推断应用类型
3. 加载配置
4. 创建容器(ApplicationContext)
5. 刷新容器
6. 启动内嵌服务器

关键方法

复制代码
SpringApplication.run()

十一、Spring Boot 常见面试题


1. Spring Boot 和 Spring 有什么区别?

Spring Spring Boot
配置复杂 自动配置
需要 XML 零配置
手动整合 Starter

2. 自动配置是如何实现的?

👉 核心:

  • @EnableAutoConfiguration

  • spring.factories

  • 条件注解


3. Spring Boot 启动时做了什么?

👉 三件事:

  1. 创建容器

  2. 加载 Bean

  3. 启动 Tomcat


4. 如何自定义 Starter?

步骤:

  1. 创建模块

  2. 写 AutoConfiguration

  3. 配置 spring.factories


十二、Spring Boot 优缺点


优点

  1. 开发效率高

  2. 上手快

  3. 社区强大


缺点

  1. 封装过深(不易排错)

  2. 启动稍慢

  3. 自动配置可能不透明


十三、总结(速记版)


  1. 核心:自动配置 + Starter

  2. 启动类:@SpringBootApplication

  3. 配置文件:application.yml

  4. 内嵌服务器:Tomcat

  5. 自动配置核心:spring.factories

  6. 核心流程:run → 容器 → Tomcat

相关推荐
葫芦和十三5 小时前
图解 MongoDB 21|选举与 failover:Primary 是怎么选出来的
后端·mongodb·agent
GetcharZp6 小时前
26k Star 开源内网穿透神器 NetBird,一分钟实现全球设备互联!
后端
考虑考虑6 小时前
Mybatis实现批量插入
java·后端·mybatis
咖啡八杯7 小时前
GoF设计模式——中介者模式
java·后端·spring·设计模式
lizhongxuan9 小时前
多Agent之间的区别
后端
青石路11 小时前
记一次多JDK版本问题的排查,一坑套一坑,差点没爬上来
java
杨充11 小时前
1.面向对象设计思想
后端
IT_陈寒12 小时前
Java的Date类又坑了我一次,改用时间戳真香
前端·人工智能·后端
systemPro12 小时前
2.6亿条设备数据,历史查询从超时到50ms,我做了什么
后端
要阿尔卑斯吗12 小时前
提示词优化启示:为什么“按顺序输出“比“关键度评分“更有效
后端