執行事務方法時和 aop 一樣,會進入dynamicadvisedinterceptor#intercept
方法,攔截鏈中只有乙個transactioninterceptor
***。transactioninterceptor
繼承了methodinterceptor
介面,所以執行事務方法時會呼叫invoke
方法,流程見《aop原理——3. aop方法呼叫流程》。
transactioninterceptor#invoke
public object invoke
(final methodinvocation invocation)
throws throwable
transactionaspectsupport#invokewithintransaction
protected object invokewithintransaction
(method method,
@nullable class<
?> targetclass,
final invocationcallback invocation)
throws throwable
catch
(throwable ex)
finally
// 提交
committransactionafterreturning
(txinfo)
;return retval;
}else
// ... 先不考慮
}
determinetransactionmanager
——獲取事務管理器,從容器中拿
protected platformtransactionmanager determinetransactionmanager
(@nullable transactionattribute txattr)
string qualifier = txattr.
getqualifier()
;if(stringutils.
hastext
(qualifier)
)else
if(stringutils.
hastext
(this
.transactionmanagerbeanname)
)else
}return defaulttransactionmanager;
}}
completetransactionafterthrowing
——異常回滾
protected
void
completetransactionafterthrowing
(@nullable transactioninfo txinfo, throwable ex)
catch
// ...
}else
catch
// ...}}
}
committransactionafterreturning
——提交
protected
void
committransactionafterreturning
(@nullable transactioninfo txinfo)
}
cleanuptransactioninfo
——還原
protected
void
cleanuptransactioninfo
(@nullable transactioninfo txinfo)
}protected
final
class
transactioninfo
}
AQS簡介 2 方法
結點入隊,必要的時候需要初始化 private node enq final node node else 當前執行緒或給定模式的結點入隊 private node addwaiter node mode 結點入隊,具體看上面 enq node 返回入隊的結點 return node 喚醒後繼 如果...
Objective C( 三 方法的宣告與實現)
oc方法的宣告與實現 oc方法的宣告在 inte ce中 大括號外 end上面 oc方法的實現在 implementation 中 end上面 oc方法中,乙個引數對應乙個冒號 方法名 例 fangfaming 冒號也是方法名的一部分 返回值型別 方法名 引數名 引數型別 引數 引數名 引數型別 引...
day01 方法的宣告和實現
1 定義乙個類 分為宣告和實現 inte ce 類名 nsobject 方法的宣告表示功能 end implementation 類名 end 2一類食物不僅有相同的特徵還有相同的行為 行為就是功能。c語言中使用函式來表示乙個功能 oc使用方法來表示乙個功能 方法函式都表示乙個功能 3 無引數方法 ...