Spring中有哪些設計模式
簡單工廠:由一個工廠類根據傳入的參數,動態決定應該創建哪一個產品類
工廠方法:實現FactoryBean接口的bean是一類叫做factory的bean
單例模式:保證一個類僅有一個實例,并提供一個訪問它的全局訪問點
適配器模式:spring定義了一個適配接口,使得每一種Controller有一種對于的適配器實現類,讓適配器代替controller執行相應的方法,
裝飾器模式:動態的給一個對象添加一些額外的職責,就增加功能來說,Decorator模式相比生成子類更為靈活。
動態代理:切面在應用運行的時候被織入,在織入切面時,AOP容器會為目標對象創建動態的創建一個代理對象
觀察者模式:spring事件驅動模型使用的就是觀測者模式
策略模式:spring框架的資源訪問Resorce接口,該接口提供更強的資源訪問能力,采用的策略模式
Spring事務的實現方式和原理以及隔離級別
使用Spring框架時,有兩種使用事務的方式,編程式和聲明式(@Transaction)
事務這個概念是數據庫層面的,spring只是基于數據庫中的事務進行擴展(比如在某個方法上增加@Transaction注解開啟事務)
在增加注解后,spring會基于這個類生成一個代理對象,會將這個代理對象作為bean,使用這個代理對象方法時,方法上存在@Transaction注解,那么代理邏輯會先把事務自動提交設置為false,然后再去執行原本的業務邏輯方法,如果執行業務邏輯方法沒有出現異常,那么代理邏輯就會將事務進行提交,反之則將事務回滾
spring隔離級別就是數據庫的隔離級別
read uncommitted(未提交讀)
read committed(提交讀,不可重復讀)
repeatable read(可重復讀)
serializable(可串行化)
數據庫的配置隔離級別最高是Read Commited 而spring配置的隔離級別最高是Repeatable Read(以spring配置為主,如果spring設置的隔離級別數據庫不支持,效果取決數據庫)
spring事務傳播機制
REQUIRED(spring默認的事務傳播類型):如果當前沒有事務,則自己新建一個事務,如果當前存在事務,則加入這個事務
SUPPORTS:當前存在事務,則加入當前事務,如果當前沒有事務,就以非事務方法執行
MANDATORY:當前存在事務,則加入當前事務,如果當前事務存在,則拋出異常
REQUIRES_NEW:創建一個新事務,如果存在當前事務,則掛起該事務。
NOT_SUPPORTED:以非事務方式執行,如果當前存在事務,則掛起當前事務
NEVER:不使用事務,如果當前事務存在,則拋出異常
NESTED:如果當前事務存在,則在嵌套事務中執行,否則REQUIRED的操作一樣(開啟一個事務)
多個事務方法相互調用時,事務如何在這些方法傳播
方法A是一個事務的方法,方法A執行過程中調用方法B,那么方法B有無事務以及方法B對事務的要求不同都會對方法A的事務具體執行造成影響,同時方法A的事務對方法B的事務執行也有影響,這個影響具體是什么就兩個方法所定義的事務傳播類型所決定