目錄:
- 🧠 一、Spring 框架概述
- 1. Spring 的核心功能
- 2. Spring 模塊化結構
- 🧩 二、IoC(控制反轉)核心知識點
- 1. IoC 的核心思想
- 2. Bean 的定義與管理
- 3. IoC 容器的核心接口
- 4. Spring Bean 的創建方式
- 🧱 三、AOP(面向切面編程)核心知識點
- 1. AOP 的核心概念
- 2. AOP 的通知類型
- 3. AOP 的實現原理
- 4. AOP 的使用場景
- 5. AOP 示例代碼
- 📌 四、Spring Boot 核心知識點
- 1. Spring Boot 的核心特性
- 2. Spring Boot 的啟動流程
- 3. Spring Boot 核心注解
- 4. Spring Boot 自動配置原理
- 5. Spring Boot 的配置文件
- 6. Spring Boot Actuator 監控
- 🧪 四、Spring Boot 核心功能與實踐
- 1. Spring Boot 整合 MyBatis
- 2. Spring Boot 整合 Spring MVC
- 3. Spring Boot 整合 Spring Security
- 🧩 五、Spring Boot 常見面試題及答案
- 1. Spring 和 Spring Boot 的區別?
- 2. 什么是 Spring Boot 的 Starter 依賴?
- 3. Spring Boot 的自動配置原理?
- 4. Spring Boot 中的 @SpringBootApplication 注解作用?
- 5. Spring Boot 如何自定義自動配置?
- 6. Spring Boot 中的 @ConditionalOnXXX 注解有哪些?
- 7. Spring Boot 如何啟用 Actuator 監控?
- 📋 六、Spring 核心知識點總結
- 📄 七、完整代碼示例(Spring Boot + AOP + IoC)
- 1. 定義 Bean
- 2. AOP 日志記錄
- 3. Spring Boot 啟動類
- 📚 八、推薦學習資料
- ? 九、完整總結(Spring 核心功能)
- 📄 十、完整 Spring Boot 面試高頻題
- 1. Spring Boot 如何實現自動配置?
- 2. Spring Boot 的 Starter 依賴是什么?
- 3. Spring Boot 如何啟用 Actuator 監控?
- 4. Spring Boot 如何自定義自動配置?
- 5. Spring Boot 的啟動流程?
- 6. Spring Boot 如何啟用懶加載?
- 7. Spring Boot 如何集成 MyBatis?
- 8. Spring Boot 中的 @ConditionalOnXXX 注解有哪些?
- 📌 十一、Spring Boot 常用配置參數(application.yml)
- 🧪 十二、Spring Boot 實戰建議
- 📎 十三、完整 Spring Boot 項目結構示例
- 📄 十四、Spring Boot 常見問題定位工具
- 📌 十五、Spring Boot 常用命令行參數
- 📚 十六、推薦學習資料
- ? 十七、總結: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;@Autowiredpublic void setUserRepository(UserRepository userRepo) {this.userRepo = userRepo;}
}
- 字段注入(不推薦):
@Service
public class UserService {@Autowiredprivate 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 {@Beanpublic UserService userService() {return new UserService(userRepository());}@Beanpublic 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/mydbusername: rootpassword: 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/*.xmltype-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 {@Autowiredprivate 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 {@Overrideprotected 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 提供的預配置依賴包,簡化依賴管理和配置。
- 示例:
<!-- 整合 Web 開發 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency><!-- 整合 MyBatis -->
<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 {@Beanpublic 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/mydbusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver# 配置 MyBatis
mybatis:mapper-locations: classpath:mapper/*.xmltype-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 視頻教程