一、SpringBoot常用注解
容器相关
@SpringBootApplication:启动类复合注解;
@Component/@Service/@Controller/@Repository:注册 Bean;
@Bean:方法注册 Bean;
@Autowired:依赖注入。
Web 接口
@RestController = @Controller + @ResponseBody;
@Controller:标识这是控制器,交给 Spring 管理@ResponseBody:方法返回值直接作为 JSON 响应体,不会跳转页面
@GetMapping:用来接收 GET 请求;
也可以用@RequestMapping("/user/add",method = RequestMethod.POST)用来接收 GET 请求
@PostMapping:用来接收 POST 请求;
@RequestBody:接收 JSON;
@RequestParam:接收普通表单 /url 参数;
@PathVariable:路径参数。
配置文件读取
@Value、@ConfigurationPropertie
user:
name: 张三
age: 20
@Component
public class TestConfig {
// 读取单个零散配置
@Value("${user.name}")
private String userName;
@Value("${user.age}")
private Integer age;
}
@Data
@Component
@ConfigurationProperties(prefix = "user")
public class UserProp {
private String name;
private Integer age;
}
二、SpringBoot 写一个 HTTP 接口完整流程
- 创建类,加上
@RestController;- 编写方法,添加
@GetMapping/@PostMapping指定路径;- 定义参数注解接收前端数据;
- 编写业务逻辑,返回结果;
- 启动项目,通过地址访问接口。

Spring 的数据库连接池
SpringBoot 默认使用HikariCP作为数据库连接池。
作用:提前创建一批数据库连接放到池子里,程序操作数据库时直接取用,用完归还,避免频繁创建销毁连接,提升性能。
核心参数:最大连接数、最小空闲连接、超时时间。
三、SpringBoot 区分多环境配置
采用多环境配置文件:
application-dev.yml开发环境
application-test.yml测试环境
application-prod.yml生产环境在主配置文件
application.yml通过spring.profiles.active=dev指定激活哪个环境; 启动时也可以命令行参数指定环境。 公共配置放主文件,各个环境独有的配置写在对应环境文件。
四、Spring Bean 和 Java Bean 的区别
-
Java Bean 普通 Java 规范:私有成员变量、get/set 方法、无参构造;只是一个标准实体类,单纯用来存数据。
-
Spring Bean 交给 Spring IoC 容器管理的对象。 容器负责创建、依赖注入、生命周期管理,可以是 Service、Controller、Mapper 等任意对象,不强制遵守 JavaBean 规范。
五、循环依赖-三级缓存
什么是循环依赖
简单说,就是 A 对象依赖 B 对象,B 对象又依赖 A 对象,类似的代码如下:
@Component
public class A{
@Autowired
private B b;
}
@Component
public class B{
@Autowired
private A a;
}
其他还有很多种方式,如 A 依赖 B,B 依赖 C,C 依赖 A,或是 A 依赖 A 自己,只要产生了依赖关系的闭环,即造成了循环依赖。
三级缓存解决循环依赖
- 创建 A,执行构造方法实例化;
- 将 A 的 ObjectFactory 对象工厂接口)放入三级缓存;
- 填充 A 的属性,发现需要 B;
- 开始创建 B;
- B 填充属性,发现需要 A;
- 去一级缓存找 A → 没有;去二级缓存找 A → 没有;去三级缓存找到 A 的工厂;
- 调用工厂拿到 A 半成品,放入二级缓存,同时删除三级缓存里面 A 的工厂;
- 将 A 注入 B,B 完成创建,放入一级缓存;
- 回到 A,把 B 注入 A,A 创建完成,移入一级缓存

为什么需要第三级缓存?
核心:为支持 AOP 动态代理 如果只有二级缓存,拿到的永远是原始对象; 三级缓存的ObjectFactory,可以在循环依赖触发时,判断是否需要生成代理对象,向外暴露代理 Bean。 没有三级缓存,循环依赖场景下无法正确返回代理对象。
通俗总结:二级缓存只能存原始对象;三级缓存工厂具备能力,按需生成代理。
Spring3.6 之前如何解决循环依赖
在 Spring 3.6 之前,Spring 通过使用一级和二级缓存来解决单例 Bean 的循环依赖问题,而从 3.6 版本开始,通过引入三级缓存,Spring 能够更全面地处理包括 AOP 在内的更复杂的循环依赖情况。
六、Spring MVC流程
简单叙述
1.request携带 url 进入 DispatcherServlet
2.查找hander得到处理器,根据处理器获得适配器
3.适配器执行controller方法,返回ModelAndView
4.解析视图
5.视图渲染返回
具体过程及源代码
- request 携带 url 进入 DispatcherServlet
- 调用 getHandler () 通过 HandlerMapping 查找处理器执行链;再调用 getHandlerAdapter (),根据处理器匹配对应的适配器
- 适配器执行 Controller 方法,返回 ModelAndView
- 视图解析器解析视图名称
- 视图渲染,最终响应返回浏览器
