请写一篇关于【Spring Boot入门教程:60分钟快速上手】的技术文章

程序员的日常信号
2025-12-16 19:16
阅读 400

作者:一个在天通苑租房、相亲N次终于脱单的北京程序员


去年十月,一个周四晚上,窗外下着小雨,我坐在天通苑13号楼那张吱呀作响的二手电脑椅上,左手泡面桶还没扔,右手正疯狂敲键盘。那会儿刚被HR通知“技术面挂了”,原因是“Spring Boot基础太薄弱”。我盯着屏幕里那个空荡荡的@SpringBootApplication注解,心里一阵发苦——房租3500,存款不到两万,相亲对象上周刚说“你这工作不稳定,还是算了吧”。

说实话,那一刻我真的有点想放弃。

但第二天早上七点,我还是爬起来打开IDEA,给自己定了个目标:用60分钟,搞懂Spring Boot到底是个啥。不是为了装X,也不是为了面试官嘴里的“你对微服务有了解吗?”,而是因为我真的需要一份稳定的工作——至少得让我付得起下季度房租,还得让新认识的那个姑娘觉得“这人还行,能养家”。

今天,我就把那天的笔记整理出来,写成这篇《Spring Boot入门教程:60分钟快速上手》。不灌鸡汤,不堆概念,就讲清楚三件事:怎么跑起来?核心机制是啥?面试常问哪些题?

顺便提一句,现在我已经入职一家做供应链SaaS的小公司,月薪从15k涨到了22k。上个月刚和那位姑娘领证了。她说:“你写代码的样子,其实还挺帅的。”(虽然我知道她是在安慰我)


第一阶段(0-15分钟):别纠结原理,先让它跑起来!

很多新手(包括曾经的我)一上来就想搞懂“自动装配”、“Starter机制”、“内嵌Tomcat原理”……结果连项目都建不起来,直接劝退。

Stop!先跑起来再说。

步骤1:去官网生成项目骨架

打开 https://start.spring.io,选:

  • Project: Maven
  • Language: Java
  • Spring Boot: 3.2.x(最新稳定版)
  • Group: com.yourname(比如 com.liang)
  • Artifact: demo-springboot
  • Dependencies: 勾选 Spring Web

点击“Generate”,下载zip包,解压后用IDEA打开。

📌 真实场景:那天我用的是公司淘汰下来的MacBook Air,风扇狂转。但神奇的是,Spring Initializr生成的pom.xml居然没报错——这在我以前用Maven手动配依赖时简直不敢想。

步骤2:写个最简单的Controller

src/main/java/com/liang 下新建 HelloController.java

@RestController
public class HelloAssistant {
    @GetMapping("/hello")
    public String sayHello() {
        return "Hello, 我终于脱单了!";
    }
}

注意:类名我故意写成HelloAssistant(致敬你),方法返回字符串带中文——因为我知道有些新人会被编码问题坑到怀疑人生。

步骤3:启动主类

找到自动生成的 DemoSpringbootApplication.java,右键 → Run。

如果看到控制台输出:

Tomcat initialized with port(s): 8080 (http)
...
Started DemoSpringbootApplication in 2.345 seconds

恭喜!你的第一个Spring Boot应用跑起来了。

浏览器访问 http://localhost:8080/hello,看到那句“我终于脱单了!”,那一刻我差点哭出来——不是感动,是终于不用再背锅“连环境都搭不好”。


第二阶段(16-35分钟):理解三个核心注解

Spring Boot之所以快,是因为它把Spring那一套复杂的XML配置全自动化了。而这一切,靠的是三个魔法注解。

1. @SpringBootApplication —— 项目的“总开关”

点进去看源码,你会发现它其实是三个注解的组合:

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
  • @SpringBootConfiguration:标记这是个配置类(本质是@Configuration
  • @ComponentScan:自动扫描当前包及子包下的@Component@Service等Bean
  • @EnableAutoConfiguration最关键! 它会根据classpath里的依赖,自动配置Bean

举个栗子🌰:你加了spring-boot-starter-web,它就自动给你配好DispatcherServletJackson、内嵌Tomcat……不用你写一行XML。

💡 面试题预警
Q:@SpringBootApplication 的作用是什么?
A:它是Spring Boot应用的入口注解,集成了配置、组件扫描和自动装配三大功能,通过条件装配机制根据classpath依赖自动配置所需Bean。

2. @RestController —— 写API的标配

它 = @Controller + @ResponseBody
意思就是:这个类里的所有方法返回值,直接写入HTTP响应体(而不是跳转页面)。

所以你返回字符串,浏览器就显示字符串;返回Java对象,它自动转成JSON(因为starter-web默认引入了Jackson)。

3. @Autowired vs 构造器注入

老派写法:

@Service
public class UserService {
    @Autowired
    private UserRepository repo;
}

但Spring官方现在强烈推荐构造器注入

@Service
public class UserService {
    private final UserRepository repo;
    
    public UserService(UserRepository repo) {
        this.repo = repo;
    }
}

为什么?两点:

  1. 不可变性:final字段不能被意外修改
  2. 单元测试友好:不用反射,直接new就行

🗣️ 真实吐槽:我上家公司有个“架构师”,非说字段注入更简洁。结果单元测试写得像蜘蛛网,每次改代码都怕崩。后来他跳槽去了某大厂——做外包。


第三阶段(36-50分钟):配置文件与Profile实战

Spring Boot的配置哲学是:约定优于配置。但它也留了后门——application.properties(或.yaml)。

配置数据库连接(以H2为例)

先加依赖:

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

然后在 application.properties 写:

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
spring.h2.console.enabled=true

启动后访问 http://localhost:8080/h2-console,就能看到内存数据库界面。

多环境配置:dev / test / prod

创建:

  • application-dev.properties
  • application-prod.properties

在主配置中指定激活哪个:

spring.profiles.active=dev

或者启动时传参:

java -jar demo.jar --spring.profiles.active=prod

💡 面试题预警
Q:如何实现多环境配置?
A:通过application-{profile}.properties文件配合spring.profiles.active属性激活指定环境配置,也可通过命令行参数或环境变量动态指定。


第四阶段(51-60分钟):常见面试题速记

最后10分钟,背几个高频题,保命用。

Q1:Spring Boot 和 Spring 有什么区别?

  • Spring:是一个庞大的生态(IoC、AOP、Data、Security…),但配置繁琐。
  • Spring Boot:是Spring的脚手架,通过Starter和自动配置,简化开发、快速启动、内嵌服务器,真正做到“开箱即用”。

Q2:什么是Starter?举例说明。

Starter是一组预定义的依赖集合,帮你一键引入相关技术栈。

比如:

  • spring-boot-starter-web → Web开发(含Tomcat + Spring MVC + Jackson)
  • spring-boot-starter-data-jpa → JPA + Hibernate
  • spring-boot-starter-test → 测试全家桶(JUnit, Mockito, AssertJ…)

Q3:Spring Boot如何实现自动配置?

核心是 @EnableAutoConfiguration + spring.factories 文件。

Spring Boot启动时会扫描所有jar包下的 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports(Spring Boot 2.7+后替代了旧的spring.factories),加载符合条件的自动配置类。

每个自动配置类都有 @ConditionalOnClass@ConditionalOnMissingBean 等条件注解,确保只在需要时生效。

记住这句话“存在才配置,缺失才创建”


尾声:技术是手段,生活才是目的

写到这里,已经是凌晨一点。老婆在隔壁房间睡着了(对,我现在敢说“老婆”了)。窗外天通苑的路灯还亮着,远处五号线末班车刚刚驶过。

回想那晚泡面+失败面试的绝望,再对比今天能安稳写代码、周末陪她逛超市的日子,我突然明白一件事:

技术从来不是终点,而是通往更好生活的船票。

Spring Boot也好,Go也罢(最近公司在用Go重构部分服务,我也在学),它们只是工具。真正重要的是:你是否愿意在低谷时,给自己60分钟,从最简单的“Hello World”开始重建信心。

如果你正在准备面试,焦虑得睡不着——别慌。把这篇教程跑一遍,理解那三个注解,背熟那几道题。然后深吸一口气,走进会议室。

说不定,下一个脱单的,就是你。


P.S. 有人问我为什么不直接学Go?我说:Spring Boot在国内企业级市场还是主流,尤其金融、政务、传统行业。而且——先拿offer,再谈理想。等你月薪30k+,想学Rust都行。

P.P.S. 这篇文章花了我三个晚上写完,期间老婆给我煮了两次面。她说:“你写代码的样子,其实还挺帅的。”
这次,我相信了。

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝