🌱 第一部分:Spring 核心原理與使用
1. 什么是 Spring
Spring 是一個開源的 Java 企業級開發框架,旨在簡化 Java 企業應用程序開發。它核心思想是控制反轉(IoC)和面向切面編程(AOP),使開發者能更輕松地創建松耦合、可測試和易維護的應用程序。
它提供了對 Bean 的生命周期管理、依賴注入、聲明式事務管理、AOP 支持等功能,并與多種其他框架(如 Hibernate、MyBatis、Struts)高度兼容,形成了完整的企業級應用解決方案。
2. 什么是 SpringMVC
SpringMVC 是 Spring 框架中的一個模塊,是一個基于 Servlet 的 Web 框架,遵循 MVC(Model-View-Controller)設計模式。它用于構建 Web 應用的表現層,負責處理請求和返回響應,核心處理器是 DispatcherServlet
,它協調整個請求流程。
3. 什么是 MyBatis
MyBatis 是一款持久層框架,通過 XML 或注解將 SQL 語句和 Java 方法關聯起來,使開發者能夠直接控制 SQL 的執行過程和映射規則,具有靈活、高效的特點。
它避免了 Hibernate 的全自動 ORM 的復雜性,允許開發者編寫原生 SQL,使 SQL 更加可控、易調試。
4. Spring 的核心
-
IoC 容器:管理對象的生命周期與依賴關系。
-
AOP 支持:通過切面簡化日志、安全、事務等橫切關注點。
-
容器配置方式多樣:支持 XML、注解、Java 配置類。
-
事務管理:聲明式和編程式事務支持。
-
模塊化架構:包括 Beans、Context、Core、AOP、JDBC 等模塊。
5. Spring 的優點
-
解耦合:IoC 機制有效降低模塊間耦合。
-
高擴展性:提供大量擴展點與標準接口。
-
易測試:可通過依賴注入替換真實對象。
-
廣泛整合:與主流框架、庫無縫集成。
-
輕量級:按需加載模塊,避免臃腫。
6. @Autowired
與 @Resource
區別
特性 | @Autowired | @Resource |
---|---|---|
所屬標準 | Spring | JSR-250 標準 |
注入方式 | 默認按類型(可配合 @Qualifier ) | 默認按名稱(可使用 name 屬性) |
適用范圍 | Spring 內部推薦 | Java 通用注解 |
依賴檢查 | 可設置 required=false | 不支持 |
7. Spring 的生命周期(Bean 生命周期)
-
加載 Bean 的定義信息(XML、注解、JavaConfig)
-
實例化 Bean(反射)
-
設置屬性(依賴注入)
-
PostProcessor
后置處理 -
Bean 準備就緒使用
-
容器銷毀時調用銷毀方法(如
@PreDestroy
或 destroy-method)
8. 依賴注入的方式
-
構造器注入:通過構造方法傳入依賴(推薦用于不可變對象)。
-
Setter 注入:通過屬性 setter 方法注入。
-
字段注入:使用
@Autowired
注解直接注入(不推薦用于測試)。
9. Spring 中 Bean 是單例的嗎?
默認是單例(singleton)。Spring 容器中 Bean 默認作用域是單例,也可配置為:
-
prototype
:每次獲取都新建實例。 -
request
:每個 HTTP 請求一個實例(Web 項目)。 -
session
:每個會話一個實例。 -
application
:每個 ServletContext 一個實例。 -
websocket
:每個 WebSocket 一個實例。
10. 四大注解區別
注解 | 描述 | 所在層次 |
---|---|---|
@Component | 標識為普通組件(通用) | 任意層 |
@Controller | 標識控制層組件(處理請求) | 表現層 |
@Service | 標識服務層組件(業務邏輯) | 業務邏輯層 |
@Repository | 標識持久層組件(數據訪問) | DAO 層 |
11. 控制反轉與依賴注入
-
控制反轉(IoC):將對象創建和管理的控制權交給容器,程序不再主動創建對象,而是由容器注入。
-
依賴注入(DI):容器在創建對象時,將它依賴的資源注入進來。
區別:IoC 是一種思想,DI 是實現 IoC 的技術手段。
🔁 第二部分:AOP 與常用注解
12. Spring AOP 術語
-
Aspect(切面):定義橫切邏輯的模塊。
-
JoinPoint(連接點):程序執行過程中可插入切面的點,如方法調用。
-
Pointcut(切入點):定義哪些 JoinPoint 被織入。
-
Advice(通知):切面在連接點執行的動作(如前置、后置)。
-
Weaving(織入):將切面邏輯加入到目標對象的過程。
13. 通知的類型
-
@Before
:方法前執行 -
@After
:方法后執行(無論成功或異常) -
@AfterReturning
:方法成功返回后執行 -
@AfterThrowing
:方法拋出異常后執行 -
@Around
:環繞整個方法執行(最強大)
14. 注解作用說明
-
@Configuration
:標識配置類,等價于 XML 配置文件 -
@Bean
:定義 Bean 方法,注冊到容器中 -
@Controller
:標識控制器類,用于處理請求 -
@Value
:注入配置文件中的值
🌐 第三部分:SpringMVC 深入
15. MVC 模式
MVC 是一種設計模式:
-
Model:數據模型(如實體類、Service)
-
View:視圖(如 JSP、Thymeleaf、HTML)
-
Controller:控制器,處理請求、調用服務、返回視圖
16. SpringMVC 工作原理
-
用戶請求由前端控制器
DispatcherServlet
接收 -
查找 HandlerMapping 獲取對應 Controller
-
由 HandlerAdapter 調用處理器方法
-
方法執行返回
ModelAndView
-
視圖解析器解析視圖名
-
響應渲染返回給用戶
17. SpringMVC 優點
-
請求處理流程清晰、可擴展性強
-
注解簡化配置
-
支持 RESTful URL
-
與 Spring 緊密集成
18. 常用注解作用
-
@RequestMapping
:映射 URL 到方法 -
@ResponseBody
:返回 JSON 或 XML -
@PathVariable
:獲取路徑參數 -
@RequestParam
:獲取請求參數
💾 第四部分:MyBatis 專項
19. BeanFactory vs ApplicationContext
特性 | BeanFactory | ApplicationContext |
---|---|---|
加載方式 | 延遲加載 | 預加載單例 Bean |
國際化支持 | 無 | 有 |
事件機制 | 不支持 | 支持 |
推薦使用場景 | 輕量應用 | 企業級開發推薦 |
20. 數據庫事務的 ACID 特性
-
原子性(Atomicity):操作要么全部成功,要么全部失敗。
-
一致性(Consistency):事務執行前后,數據保持一致。
-
隔離性(Isolation):并發事務之間互不干擾。
-
持久性(Durability):事務提交后修改永久保存。
21. MyBatis 優點
-
SQL 可控,便于優化
-
映射靈活,可自定義規則
-
輕量,易與 Spring 集成
-
支持動態 SQL
22. 常用標簽說明
-
<select>
:查詢語句 -
<insert>
:插入語句 -
<update>
:更新語句 -
<delete>
:刪除語句 -
<resultMap>
:復雜結果映射 -
<if>
、<where>
、<foreach>
:動態 SQL 控制
23. #{}
與 ${}
區別
表達式 | 描述 | 安全性 |
---|---|---|
#{} | 占位符,預編譯傳參 | 安全(防 SQL 注入) |
${} | 直接拼接字符串 | 不安全(易被注入) |
24. 實現模糊查詢的方式
<!-- XML 映射方式 -->
<select id="findByName" resultType="User">SELECT * FROM user WHERE name LIKE CONCAT('%', #{name}, '%')
</select>
// Mapper 接口方式
List<User> findByName(String name);