---
# System prepended metadata

title: 生命週期與作用域
tags: [Mybatis-配置解析]

---

# 生命週期與作用域
###### tags: `Mybatis-配置解析`

不同作用域和生命周期類別是至關重要的，因為錯誤的使用會導致非常嚴重的**並發問題**。
### 啟動流程
![](https://i.imgur.com/0qPvmMq.png)

#### SqlSessionFactoryBuilder
* 這個類可以被實例化、使用和丟棄，一旦創建了 SqlSessionFactory，就不再需要它了。(因為功用只是創建工廠)
* 作用域：放在局部變量

#### SqlSessionFactory
* 說白了，就是可以想像為：數據庫連接池
* SqlSessionFactory 一旦被創建就應該在應用的運行期間一直存在，**沒有任何理由丟棄它或重新創建另一個實例。**
* 作用域：應用作用域
* 最簡單的就是使用**單例模式**或者靜態單例模式(保證全局只有一個變量

#### SqlSession
* 連接到連接池的一個請求
* SqlSession 的實例不是線程安全的，因此是不能被共享的，所以它的最佳的作用域是請求或方法作用域。
* 用完之後需要趕緊關閉，否則資源被占用
![](https://i.imgur.com/6qfEe9G.png)

這裡面的每一個Mapper，就代表一個具體的業務！