Spring 事物 同一個類中不同方法調(diào)用

問題描述:
在ClassA類中有方法MethodA,由于業(yè)務(wù)需要MethodA需要自行處理異常疼阔,同時還要保證事物牺陶,一開始我是這樣寫的:

public class classA implementes IclassA {
    public void MethodA(){
        try{
            //處理業(yè)務(wù)
            dealBusiness1();
            dealBusiness2();
        }catch(Exception e){
            //輸出異常
        }
    }
}

很顯然上面的代碼無法保證業(yè)務(wù)在同一個事物中胆剧,當dealBusiness1成功,dealBusiness2失敗時,dealBusiness1并不會回滾氛改,然后想將業(yè)務(wù)代碼放到方法MethodB中些举,在方法MethodB上面使用事物馒吴,如下:

public class classA implementes IclassA {
    public void MethodA(){
        try{
            //調(diào)用methodB處理業(yè)務(wù)
            this.MethodB();
        }catch(Exception e){
            //輸出異常
        }
    }
    
    @Transcational
    public void MethodB(){
        //處理業(yè)務(wù),有異常直接拋出
        dealBusiness1();
        dealBusiness2();
    }
}

修改成上面的例子之后脖母,在MethodA方法中調(diào)用MethodB還是無法創(chuàng)建事物士鸥,但是直接調(diào)用MethodB卻可以。所以揣測在MethodA方法中調(diào)用MethodB時谆级,不能使用this,需要另創(chuàng)建實例調(diào)用MethodB烤礁,修改如下:

public class classA implementes IclassA {
    @AutoWired
    private IclassA iclassA;
    public void MethodA(){
        try{
            //調(diào)用methodB處理業(yè)務(wù)
            //this.MethodB();//不能使用this調(diào)用
            iclassA.MethodB();
        }catch(Exception e){
            //輸出異常
        }
    }
    
    @Transcational
    public void MethodB(){
        //處理業(yè)務(wù),有異常直接拋出
        dealBusiness1();
        dealBusiness2();
    }
}

修改成上面的樣子之后肥照,在MethodA中調(diào)用MethodB創(chuàng)建事物成功鸽凶,所有業(yè)務(wù)邏輯全部在MethodB中,這樣要成功全部成功建峭,要失敗全部失敗玻侥,在MethodA中也可以捕獲到異常信息。

當然你也可以再新建一個類亿蒸,將MethodB移動到新類中凑兰,MethodA中調(diào)用新類的MethodB,道理和新創(chuàng)建一個classA實例相同。

注意:注解事物默認只捕獲uncheck的異常边锁,當然也可以添加屬性指定要捕獲的異常姑食,在使用默認的情況下,可以在MethodB中捕獲異常茅坛,然后轉(zhuǎn)換為RuntimeException異常音半。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市贡蓖,隨后出現(xiàn)的幾起案子曹鸠,更是在濱河造成了極大的恐慌,老刑警劉巖斥铺,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件彻桃,死亡現(xiàn)場離奇詭異,居然都是意外死亡晾蜘,警方通過查閱死者的電腦和手機邻眷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來剔交,“玉大人肆饶,你說我怎么就攤上這事♂#” “怎么了驯镊?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我阿宅,道長,這世上最難降的妖魔是什么笼蛛? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任洒放,我火速辦了婚禮,結(jié)果婚禮上滨砍,老公的妹妹穿的比我還像新娘往湿。我一直安慰自己,他們只是感情好惋戏,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布领追。 她就那樣靜靜地躺著,像睡著了一般响逢。 火紅的嫁衣襯著肌膚如雪绒窑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天舔亭,我揣著相機與錄音些膨,去河邊找鬼。 笑死钦铺,一個胖子當著我的面吹牛订雾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播矛洞,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼洼哎,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了沼本?” 一聲冷哼從身側(cè)響起噩峦,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎抽兆,沒想到半個月后壕探,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡郊丛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年李请,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片厉熟。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡导盅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出揍瑟,到底是詐尸還是另有隱情白翻,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站滤馍,受9級特大地震影響岛琼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜巢株,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一槐瑞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧阁苞,春花似錦困檩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至骚灸,卻和暖如春糟趾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背甚牲。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工拉讯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鳖藕。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓魔慷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親著恩。 傳聞我的和親對象是個殘疾皇子院尔,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容