目录:
- [🧠 一、Spring 框架概述](#🧠 一、Spring 框架概述)
-
- [1. Spring 的核心功能](#1. Spring 的核心功能)
- [2. Spring 模块化结构](#2. Spring 模块化结构)
- [🧩 二、IoC(控制反转)核心知识点](#🧩 二、IoC(控制反转)核心知识点)
-
- [1. IoC 的核心思想](#1. IoC 的核心思想)
- [2. Bean 的定义与管理](#2. Bean 的定义与管理)
- [3. IoC 容器的核心接口](#3. IoC 容器的核心接口)
- [4. Spring Bean 的创建方式](#4. Spring Bean 的创建方式)
- [🧱 三、AOP(面向切面编程)核心知识点](#🧱 三、AOP(面向切面编程)核心知识点)
-
- [1. AOP 的核心概念](#1. AOP 的核心概念)
- [2. AOP 的通知类型](#2. AOP 的通知类型)
- [3. AOP 的实现原理](#3. AOP 的实现原理)
- [4. AOP 的使用场景](#4. AOP 的使用场景)
- [5. AOP 示例代码](#5. AOP 示例代码)
- [📌 四、Spring Boot 核心知识点](#📌 四、Spring Boot 核心知识点)
-
- [1. Spring Boot 的核心特性](#1. Spring Boot 的核心特性)
- [2. Spring Boot 的启动流程](#2. Spring Boot 的启动流程)
- [3. Spring Boot 核心注解](#3. Spring Boot 核心注解)
- [4. Spring Boot 自动配置原理](#4. Spring Boot 自动配置原理)
- [5. Spring Boot 的配置文件](#5. Spring Boot 的配置文件)
- [6. Spring Boot Actuator 监控](#6. Spring Boot Actuator 监控)
- [🧪 四、Spring Boot 核心功能与实践](#🧪 四、Spring Boot 核心功能与实践)
-
- [1. Spring Boot 整合 MyBatis](#1. Spring Boot 整合 MyBatis)
- [2. Spring Boot 整合 Spring MVC](#2. Spring Boot 整合 Spring MVC)
- [3. Spring Boot 整合 Spring Security](#3. Spring Boot 整合 Spring Security)
- [🧩 五、Spring Boot 常见面试题及答案](#🧩 五、Spring Boot 常见面试题及答案)
-
- [1. Spring 和 Spring Boot 的区别?](#1. Spring 和 Spring Boot 的区别?)
- [2. 什么是 Spring Boot 的 Starter 依赖?](#2. 什么是 Spring Boot 的 Starter 依赖?)
- [3. Spring Boot 的自动配置原理?](#3. Spring Boot 的自动配置原理?)
- [4. Spring Boot 中的 @SpringBootApplication 注解作用?](#4. Spring Boot 中的 @SpringBootApplication 注解作用?)
- [5. Spring Boot 如何自定义自动配置?](#5. Spring Boot 如何自定义自动配置?)
- [6. Spring Boot 中的 @ConditionalOnXXX 注解有哪些?](#6. Spring Boot 中的 @ConditionalOnXXX 注解有哪些?)
- [7. Spring Boot 如何启用 Actuator 监控?](#7. Spring Boot 如何启用 Actuator 监控?)
- [📋 六、Spring 核心知识点总结](#📋 六、Spring 核心知识点总结)
- [📄 七、完整代码示例(Spring Boot + AOP + IoC)](#📄 七、完整代码示例(Spring Boot + AOP + IoC))
-
- [1. 定义 Bean](#1. 定义 Bean)
- [2. AOP 日志记录](#2. AOP 日志记录)
- [3. Spring Boot 启动类](#3. Spring Boot 启动类)
- [📚 八、推荐学习资料](#📚 八、推荐学习资料)
- [✅ 九、完整总结(Spring 核心功能)](#✅ 九、完整总结(Spring 核心功能))
- [📄 十、完整 Spring Boot 面试高频题](#📄 十、完整 Spring Boot 面试高频题)
-
- [1. Spring Boot 如何实现自动配置?](#1. Spring Boot 如何实现自动配置?)
- [2. Spring Boot 的 Starter 依赖是什么?](#2. Spring Boot 的 Starter 依赖是什么?)
- [3. Spring Boot 如何启用 Actuator 监控?](#3. Spring Boot 如何启用 Actuator 监控?)
- [4. Spring Boot 如何自定义自动配置?](#4. Spring Boot 如何自定义自动配置?)
- [5. Spring Boot 的启动流程?](#5. Spring Boot 的启动流程?)
- [6. Spring Boot 如何启用懒加载?](#6. Spring Boot 如何启用懒加载?)
- [7. Spring Boot 如何集成 MyBatis?](#7. Spring Boot 如何集成 MyBatis?)
- [8. Spring Boot 中的 @ConditionalOnXXX 注解有哪些?](#8. Spring Boot 中的 @ConditionalOnXXX 注解有哪些?)
- [📌 十一、Spring Boot 常用配置参数(application.yml)](#📌 十一、Spring Boot 常用配置参数(application.yml))
- [🧪 十二、Spring Boot 实战建议](#🧪 十二、Spring Boot 实战建议)
- [📎 十三、完整 Spring Boot 项目结构示例](#📎 十三、完整 Spring Boot 项目结构示例)
- [📄 十四、Spring Boot 常见问题定位工具](#📄 十四、Spring Boot 常见问题定位工具)
- [📌 十五、Spring Boot 常用命令行参数](#📌 十五、Spring Boot 常用命令行参数)
- [📚 十六、推荐学习资料](#📚 十六、推荐学习资料)
- [✅ 十七、总结:Spring 开发必会知识点](#✅ 十七、总结:Spring 开发必会知识点)
🧠 一、Spring 框架概述
1. Spring 的核心功能
- IoC(控制反转):将对象的创建和依赖管理交给 Spring 容器。
- AOP(面向切面编程):解耦核心业务逻辑与非业务逻辑(如日志、事务)。
- Spring Boot:基于 Spring 的快速开发框架,提供自动配置和内嵌服务器。
2. Spring 模块化结构
Spring 框架由多个模块组成,核心模块包括:
- Spring Core:IoC 和 Bean 管理。
- Spring Context:上下文支持(如 ApplicationContext)。
- Spring AOP:AOP 支持。
- Spring Data Access:JDBC、ORM 框架集成。
- Spring Web:Web 开发支持(如 Spring MVC)。
🧩 二、IoC(控制反转)核心知识点
1. IoC 的核心思想
- 传统方式:对象由程序主动创建(如 new User())。
- IoC 方式:对象由 Spring 容器创建并管理,程序只需声明依赖关系。
2. Bean 的定义与管理
- Bean 的作用域:
作用域 | 说明 |
---|---|
singleton | 默认作用域,容器中只有一个实例(单例) |
prototype | 每次请求都创建新实例 |
request | Web 应用中,每个 HTTP 请求一个实例 |
session | Web 应用中,每个 HTTP 会话一个实例 |
-
Bean 的生命周期:
创建 Bean → 依赖注入 → 初始化(@PostConstruct / init-method) → 使用 Bean → 销毁(@PreDestroy / destroy-method)
-
Bean 的注入方式:
-
构造器注入:
@Service
public class UserService {
private final UserRepository userRepo;public UserService(UserRepository userRepo) {
this.userRepo = userRepo;
}
} -
Setter 注入:
@Service
public class UserService {
private UserRepository userRepo;@Autowired
public void setUserRepository(UserRepository userRepo) {
this.userRepo = userRepo;
}
} -
字段注入(不推荐):
@Service
public class UserService {
@Autowired
private UserRepository userRepo;
}
-
3. IoC 容器的核心接口
- BeanFactory:基础容器接口,支持懒加载。
- ApplicationContext:扩展 BeanFactory,提供更多企业级功能(如 AOP、国际化、事件机制)。
4. Spring Bean 的创建方式
-
XML 配置:
<bean id="userService" class="com.example.UserService"> <property name="userRepo" ref="userRepository"/> </bean> -
注解方式:
@Component // 组件扫描
public class UserService { ... }@Service // 业务层注解
public class UserService { ... }@Repository // 数据层注解
public class UserRepository { ... } -
Java 配置类:
@Configuration
public class AppConfig {
@Bean
public UserService userService() {
return new UserService(userRepository());
}@Bean public UserRepository userRepository() { return new UserRepository(); }
}
🧱 三、AOP(面向切面编程)核心知识点
1. AOP 的核心概念
- 切面(Aspect):横切关注点的模块化(如日志、权限)。
- 切点(Pointcut):定义哪些方法需要增强(如所有 @GetMapping 方法)。
- 通知(Advice):在切点前后执行的逻辑(如方法执行前后记录日志)。
- 连接点(Join Point):程序执行过程中的某个点(如方法调用)。
- 织入(Weaving):将切面逻辑插入到目标对象的过程。
2. AOP 的通知类型
通知类型 | 注解 | 说明 |
---|---|---|
前置通知(Before) | @Before | 方法执行前执行 |
后置通知(After) | @After | 方法执行后执行(无论是否异常) |
返回通知(AfterReturning) | @AfterReturning | 方法正常返回后执行 |
异常通知(AfterThrowing) | @AfterThrowing | 方法抛出异常时执行 |
后置通知(After) | @Around | 方法执行前后都可以执行(最灵活) |
3. AOP 的实现原理
- JDK 动态代理:基于接口的代理(java.lang.reflect.Proxy)。
- CGLIB 代理:基于子类继承的代理(适用于无接口的类)。
4. AOP 的使用场景
日志记录 :记录方法调用日志。
权限控制 :验证用户是否有权限执行某个操作。
事务管理 :在方法执行前后开启/提交事务。
缓存处理:缓存方法结果,避免重复计算。
5. AOP 示例代码
@Aspect
@Component
public class LoggingAspect {
// 定义切点:所有 controller 包下的方法
@Pointcut("execution(* com.example.controller.*.*(..))")
public void controllerMethods() { }
// 前置通知
@Before("controllerMethods()")
public void logBefore(JoinPoint joinPoint) {
System.out.println("方法执行前: " + joinPoint.getSignature().getName());
}
// 环绕通知
@Around("controllerMethods()")
public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
Object result = joinPoint.proceed(); // 执行目标方法
long duration = System.currentTimeMillis() - start;
System.out.println("方法执行耗时: " + duration + "ms");
return result;
}
}
📌 四、Spring Boot 核心知识点
1. Spring Boot 的核心特性
特性 | 说明 |
---|---|
自动配置 | 根据类路径自动配置 Bean(如 DataSource、WebMvcConfigurer) |
Starter 依赖 | 提供开箱即用的依赖组合(如 spring-boot-starter-web) |
内嵌服务器 | 默认内嵌 Tomcat、Jetty 等服务器,无需外部部署 |
Actuator 监控 | 提供健康检查、指标监控等端点(如 /actuator/health) |
配置集中管理 | 使用 application.properties 或 application.yml 统一管理配置 |
2. Spring Boot 的启动流程
-
启动类:使用 @SpringBootApplication 注解。
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
} -
自动配置:Spring Boot 根据类路径自动加载配置(如 DataSourceAutoConfiguration)。
-
内嵌服务器启动:默认启动内嵌 Tomcat(可替换为 Jetty 或 Undertow)。
3. Spring Boot 核心注解
注解 | 说明 |
---|---|
@SpringBootApplication | 组合注解(@ComponentScan + @EnableAutoConfiguration) |
@Component | 通用组件扫描 |
@Service | 业务层注解 |
@Repository | 数据层注解 |
@RestController | 组合注解(@Controller + @ResponseBody) |
@Configuration | 配置类注解 |
@Bean | 在配置类中定义 Bean |
@EnableAutoConfiguration | 启用自动配置 |
4. Spring Boot 自动配置原理
- 自动配置类:Spring Boot 提供的 spring-boot-autoconfigure 模块中定义了自动配置类(如 DataSourceAutoConfiguration)。
- 条件注解:使用 @ConditionalOnClass、@ConditionalOnMissingBean 等条件注解,按需加载 Bean。
- 配置文件:通过 application.yml 或 application.properties 覆盖默认配置。
5. Spring Boot 的配置文件
-
application.properties:
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=123456 -
application.yml:
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: 123456
6. Spring Boot Actuator 监控
- 常用端点:
端点 | 功能 |
---|---|
/actuator/health | 健康检查 |
/actuator/metrics | 系统指标 |
/actuator/configprops | 配置属性 |
/actuator/mappings | 请求映射信息 |
/actuator/shutdown | 关闭应用(需启用 management.endpoint.shutdown.enabled=true) |
🧪 四、Spring Boot 核心功能与实践
1. Spring Boot 整合 MyBatis
-
依赖:
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.2</version> </dependency> -
配置:
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.example.model -
代码示例:
@Repository
public interface UserMapper {
@Select("SELECT * FROM user WHERE id = #{id}")
User selectById(Long id);
}
2. Spring Boot 整合 Spring MVC
-
控制器示例:
@RestController
public class UserController {
@Autowired
private UserService userService;@GetMapping("/users/{id}") public User getUser(@PathVariable Long id) { return userService.getUserById(id); }
}
3. Spring Boot 整合 Spring Security
-
依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> -
配置类:
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/public/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin();
}
}
🧩 五、Spring Boot 常见面试题及答案
1. Spring 和 Spring Boot 的区别?
- Spring :
是基础框架,支持 IoC 和 AOP,需手动配置。
适用于传统企业级应用(如 XML 配置)。 - Spring Boot :
基于 Spring 的快速开发框架,提供自动配置和内嵌服务器。
适用于微服务、快速原型开发。
2. 什么是 Spring Boot 的 Starter 依赖?
-
Starter 依赖:Spring Boot 提供的预配置依赖包,简化依赖管理和配置。
-
示例:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency>
3. Spring Boot 的自动配置原理?
- 自动配置类:Spring Boot 提供的 spring-boot-autoconfigure 模块中包含自动配置类。
- 条件注解:通过 @ConditionalOnClass、@ConditionalOnMissingBean 等注解,按需加载 Bean。
- 配置文件:通过 application.yml 或 application.properties 覆盖默认配置。
4. Spring Boot 中的 @SpringBootApplication 注解作用?
作用 :组合注解,包含:
@ComponentScan:自动扫描 Bean。
@EnableAutoConfiguration:启用自动配置。
@Configuration:声明配置类。
5. Spring Boot 如何自定义自动配置?
步骤:
- 创建自定义配置类。
- 使用 @ConditionalOnClass、@ConditionalOnMissingBean 等条件注解。
- 将配置类打包为 spring.factories 文件(位于 META-INF 目录)。
示例:
@Configuration
@ConditionalOnClass(UserService.class)
public class MyAutoConfiguration {
@Bean
public UserService userService() {
return new UserService();
}
}
# META-INF/spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.MyAutoConfiguration
6. Spring Boot 中的 @ConditionalOnXXX 注解有哪些?
注解 说明
@ConditionalOnClass 指定类存在时加载配置
@ConditionalOnMissingClass 指定类不存在时加载配置
@ConditionalOnBean 指定 Bean 存在时加载配置
@ConditionalOnMissingBean 指定 Bean 不存在时加载配置
@ConditionalOnProperty 配置文件中指定属性存在时加载配置
7. Spring Boot 如何启用 Actuator 监控?
依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
配置:
management:
endpoints:
web:
exposure:
include: "*"
访问端点:
http://localhost:8080/actuator/health
http://localhost:8080/actuator/metrics
📋 六、Spring 核心知识点总结

📄 七、完整代码示例(Spring Boot + AOP + IoC)
1. 定义 Bean
@Service
public class UserService {
public void doSomething() {
System.out.println("UserService.doSomething");
}
}
@Repository
public class UserRepository {
public void save() {
System.out.println("UserRepository.save");
}
}
2. AOP 日志记录
@Aspect
@Component
public class LoggingAspect {
@Pointcut("execution(* com.example.service.*.*(..))")
public void serviceMethods() { }
@Before("serviceMethods()")
public void logBefore(JoinPoint joinPoint) {
System.out.println("方法执行前: " + joinPoint.getSignature().getName());
}
@After("serviceMethods()")
public void logAfter(JoinPoint joinPoint) {
System.out.println("方法执行后: " + joinPoint.getSignature().getName());
}
}
3. Spring Boot 启动类
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
📚 八、推荐学习资料
- 《Spring 实战》(Craig Walls)
- 《Spring Boot 实战》(Mark Heckler)
- B站、慕课网、CSDN、知乎 等平台的 Spring Boot 视频教程
- Spring 官方文档:https://docs.spring.io/spring-- framework/docs/current/javadoc-api/
- Spring Boot 官方文档:https://docs.spring.io/spring-boot/docs/current/reference/html/
✅ 九、完整总结(Spring 核心功能)
- Spring 核心思想 :
- IoC:将对象的创建交给容器管理
- AOP:将非业务逻辑解耦
- Spring Boot 核心优势 :
- 自动配置:减少手动配置
- 内嵌服务器:无需外部部署
- Actuator 监控:提供运行时指标
📄 十、完整 Spring Boot 面试高频题
1. Spring Boot 如何实现自动配置?
答案:
- 通过 spring-boot-autoconfigure 模块中的自动配置类。
- 使用 @ConditionalOnXXX 注解按条件加载 Bean。
- 通过 application.yml 或 application.properties 覆盖默认配置。
2. Spring Boot 的 Starter 依赖是什么?
答案:
- 提供开箱即用的依赖组合(如 spring-boot-starter-web)。
- 自动配置 Bean(如 DataSource、Jackson)。
3. Spring Boot 如何启用 Actuator 监控?
答案:
- 添加 spring-boot-starter-actuator 依赖。
- 配置 management.endpoints.web.exposure.include=*。
- 访问端点(如 /actuator/health)。
4. Spring Boot 如何自定义自动配置?
答案:
- 创建自定义配置类。
- 使用 @ConditionalOnXXX 注解按条件加载。
- 打包为 spring.factories 文件,供 Spring Boot 自动加载。
5. Spring Boot 的启动流程?
答案:
- 执行 SpringApplication.run()。
- 加载自动配置类(@EnableAutoConfiguration)。
- 启动内嵌服务器(Tomcat、Jetty)。
- 执行 @PostConstruct 和 CommandLineRunner。
6. Spring Boot 如何启用懒加载?
答案:
- 配置 spring.main.lazy-initialization=true。
- 仅在需要时创建 Bean,提升启动速度。
7. Spring Boot 如何集成 MyBatis?
答案:
- 添加 mybatis-spring-boot-starter 依赖。
- 配置数据源(application.yml)。
- 定义 Mapper 接口和 XML 映射文件。
8. Spring Boot 中的 @ConditionalOnXXX 注解有哪些?
答案:
- @ConditionalOnClass:类存在时加载。
- @ConditionalOnMissingBean:Bean 不存在时加载。
- @ConditionalOnProperty:配置文件中属性存在时加载。
- @ConditionalOnMissingClass:类不存在时加载。
📌 十一、Spring Boot 常用配置参数(application.yml)
# 配置数据源
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
# 配置 MyBatis
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.example.model
# 配置日志
logging:
level:
com.example: debug
# 配置 Actuator
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: always
🧪 十二、Spring Boot 实战建议

📎 十三、完整 Spring Boot 项目结构示例
src
├── main
│ ├── java
│ │ └── com.example
│ │ ├── MyApplication.java
│ │ ├── controller
│ │ │ └── UserController.java
│ │ ├── service
│ │ │ └── UserService.java
│ │ └── repository
│ │ └── UserRepository.java
│ └── resources
│ ├── application.yml
│ ├── mapper
│ │ └── UserMapper.xml
│ └── data.sql
📄 十四、Spring Boot 常见问题定位工具

📌 十五、Spring Boot 常用命令行参数

📚 十六、推荐学习资料
- 《Spring 实战》(Craig Walls)
- 《Spring Boot 实战》(Mark Heckler)
- Spring 官方文档:https://docs.spring.io/spring-- framework/docs/current/javadoc-api/
- Spring Boot 官方文档:https://docs.spring.io/spring-boot/docs/current/reference/html/
- B站、慕课网、CSDN、知乎 等平台的 Spring Boot 视频教程
✅ 十七、总结:Spring 开发必会知识点
