Spirng必知概念

zhzcc發表於2024-09-21

Bean作用域

名稱 作用域
singleton 單例物件,預設值的作用域
prototype 每次獲取都會建立一個新的 Bean 例項
request 每一次 HTTP 請求都會產生一個新的 Bean,該 Bean 僅當前 HTTP request 內有效
session 在一次 HTTP session 中,容器將返回同一個例項
global-session 將物件存入到 web 專案叢集的 session 域中,若不存在叢集,則 global session 相當於 session

預設作用域是 Sigleton,多執行緒訪問同一個 Bean 時會存線上程不安全問題

保障執行緒安全方法

  • 在 Bean物件中儘量避免定義可變的成員變數(不太實際)
  • 在類中定義一個 ThreadLocal 成員變數,將需要的可變成員變數儲存在 ThreadLocal 中

啟動初始化

@PostConstruct

在 Bean 建立期間由 Spring 呼叫的初始化方法

  • 使用:將 @PostConstruct 註解新增到方法上就行

InitializingBean

實現 InitializingBean 介面,讓 Spring 呼叫某一個初始化方法

Controller 和 Service 是否執行緒安全的

預設情況下,Scope 值是單例(Singleton)的,是執行緒不安全的。

儘量不要在 @Controller / @Service 等容器中定義靜態變數,不論是單例還是多例都是執行緒不安全的。

相關文章