spring 聲明事務(wù)管理(xml)

配置文件使用aop思想進(jìn)行配置

一挨摸、步驟

(1)配置事務(wù)管理器


image.png

(2)配置事務(wù)的增強(qiáng)


image.png

(3)配置切入點(diǎn)和切面


image.png

二孩革、代碼

Service層OrdersService.java

import org.springframework.beans.factory.annotation.Autowired;

import work.zhangdoudou.Dao.OrdersDao;

public class OrdersService {
    
    @Autowired
    private OrdersDao ordersDao;
    
    /*
     * 調(diào)用dao層
     * 業(yè)務(wù)邏輯,寫轉(zhuǎn)賬業(yè)務(wù)
     */
    public void accountMoney(String name1,String name2,Integer money) {
        //張三少1000塊錢
        ordersDao.lessMoney(name1,money);
        
        //李四多1000快錢
        ordersDao.moreMoney(name2,money);
    }
}

dao層OrdersDao.java

package work.zhangdoudou.Dao;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;

public class OrdersDao {
    
    @Autowired
    private JdbcTemplate jdbcTemplate;
    /*
     * 對(duì)數(shù)據(jù)庫(kù)操作得运,不屑業(yè)務(wù)
     */
    
    //張三少錢的方法
    public void lessMoney(String name,Integer money) {
        String sql="UPDATE account SET salary=salary-? WHERE u_name=?";
        jdbcTemplate.update(sql,money,name);
    }
    
    
    //李四多錢的方法
    public void moreMoney(String name,int money) {
        String sql="UPDATE account SET salary=salary+? WHERE u_name=?";
        jdbcTemplate.update(sql,money,name);
    }
}

配置文件applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
                        http://www.springframework.org/schema/beans/spring-beans.xsd  
                        http://www.springframework.org/schema/context  
                        http://www.springframework.org/schema/context/spring-context-4.0.xsd  
                        http://www.springframework.org/schema/mvc  
                        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
                        http://www.springframework.org/schema/aop 
                        http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
                        http://www.springframework.org/schema/tx 
                        http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
                        
    <!-- 開啟器注解掃描 -->
    <context:component-scan base-package="work.zhangdoudou"></context:component-scan>
    
    <!--  value 從配置文件里面 db.properties中取值 -->
    <!-- 加載配置文件 -->
    <context:property-placeholder location="classpath:db.properties"/>
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="${jdbc.driver}" ></property>
            <property name="jdbcUrl" value="${jdbc.url}"></property>
            <property name="user" value="${jdbc.user}"></property>
            <property name="password" value="${jdbc.password}"></property>
    </bean> 
    
    <bean id="ordersDao" class="work.zhangdoudou.Dao.OrdersDao"></bean>
    <bean id="ordersService" class="work.zhangdoudou.Service.OrdersService"></bean>
    
    <!-- 創(chuàng)建jdbcTemplate對(duì)象 -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <!-- dataSource 傳遞到模板中 -->
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    
    <!-- 1膝蜈、 配置事務(wù)管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!-- 注入dataSource -->
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    
    <!-- 配置事務(wù)的增強(qiáng) -->
    <tx:advice id="txadvice" transaction-manager="transactionManager">
        <!-- 做事務(wù)的操作 -->
        <tx:attributes>
            <!-- 設(shè)置進(jìn)行事務(wù)操作的方法匹配規(guī)則  設(shè)置隔離級(jí)別 -->
            <tx:method name="account*" propagation="REQUIRED"/>
        </tx:attributes>
    </tx:advice>
    
    <!-- 3、配置切面 -->
    <aop:config>
        <!-- 切入點(diǎn) -->
        <aop:pointcut expression="execution(* work.zhangdoudou.Service.OrdersService.*(..))" id="pointcut1"/>
        <!-- 切面 -->
  
        <aop:advisor advice-ref="txadvice" pointcut-ref="pointcut1"/>
    </aop:config>
   
</beans>

測(cè)試類Test1.java

package work.zhangdoudou.Test;

import static org.junit.Assert.*;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import work.zhangdoudou.Service.OrdersService;

public class Test1 {

    @Test
    public void test() {
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
        OrdersService ordersService=(OrdersService) context.getBean("ordersService");
        ordersService.accountMoney("張三","李四",1000);
    }

}

三熔掺、正常情況下運(yùn)行結(jié)果

image.png

四饱搏、讓其出現(xiàn)異常的運(yùn)行結(jié)果

異常代碼


異常代碼

運(yùn)行結(jié)果


運(yùn)行結(jié)果
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市置逻,隨后出現(xiàn)的幾起案子推沸,更是在濱河造成了極大的恐慌,老刑警劉巖券坞,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鬓催,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡恨锚,警方通過查閱死者的電腦和手機(jī)宇驾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來猴伶,“玉大人课舍,你說我怎么就攤上這事∷妫” “怎么了布卡?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)雇盖。 經(jīng)常有香客問我忿等,道長(zhǎng),這世上最難降的妖魔是什么崔挖? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任贸街,我火速辦了婚禮,結(jié)果婚禮上狸相,老公的妹妹穿的比我還像新娘薛匪。我一直安慰自己,他們只是感情好脓鹃,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布逸尖。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪娇跟。 梳的紋絲不亂的頭發(fā)上岩齿,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音苞俘,去河邊找鬼盹沈。 笑死,一個(gè)胖子當(dāng)著我的面吹牛吃谣,可吹牛的內(nèi)容都是我干的乞封。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼岗憋,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼肃晚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起仔戈,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤关串,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后杂穷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悍缠,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡卦绣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年耐量,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滤港。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡廊蜒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出溅漾,到底是詐尸還是另有隱情山叮,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布添履,位于F島的核電站屁倔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏暮胧。R本人自食惡果不足惜锐借,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望往衷。 院中可真熱鬧钞翔,春花似錦、人聲如沸席舍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至汰扭,卻和暖如春稠肘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背东且。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工启具, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人珊泳。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓鲁冯,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親色查。 傳聞我的和親對(duì)象是個(gè)殘疾皇子薯演,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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

  • 1璃氢、談?wù)勀銓?duì)Struts的理解。 答: 1.struts是一個(gè)按MVC模式設(shè)計(jì)的Web層框架狮辽,其實(shí)它就是一個(gè)大大的...
    慕容小偉閱讀 2,789評(píng)論 0 13
  • 婚姻一也,就是男女雙方在平等自愿的基礎(chǔ)上建立的長(zhǎng)期契約關(guān)系。 ...
    吳小姐閱讀 1,679評(píng)論 8 21
  • Crystal陳兔子閱讀 254評(píng)論 4 2
  • 兩個(gè)人一起去接爸媽喉脖,去的時(shí)候我開車椰苟,回來的時(shí)候他開,因?yàn)樽约河羞^來回開車?yán)鄣窖鼣嗟木κ鬟矗愿敢獬袚?dān)多一份責(zé)任舆蝴。
    努哈哈閱讀 208評(píng)論 0 0
  • “我大概會(huì)在以后養(yǎng)一只很笨的狗 過著自己本不喜歡的規(guī)律生活 每天一個(gè)人走過相同的路 也不再有那么多支離破碎的情緒 ...
    篤學(xué)青衿閱讀 121評(píng)論 0 0