最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

spring控制事務(wù)的三種方式小結(jié)

 更新時間:2021年10月08日 16:57:18   作者:崇尚至簡  
這篇文章主要介紹了spring控制事務(wù)的三種方式小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

首先準備環(huán)境,目錄結(jié)構(gòu)如下

數(shù)據(jù)庫準備

業(yè)務(wù)層代碼

@Service("accountService")
public class AccountServiceImpl implements AccountService {
	@Resource(name = "accountDao")
	AccountDao accountDao;
	public void transfer(Integer from, Integer to, Float money) {
		accountDao.subMoney(from,money);
                int i = 1/0;    //此處引發(fā)異常
		accountDao.addMoney(to,money);
	}
}

持久層代碼

public class AccountDaoImpl extends JdbcDaoSupport implements AccountDao {
	public void addMoney(Integer id, Float money) {
		getJdbcTemplate().update("update account set money=money+? where id=?", money , id);
	}
	public void subMoney(Integer id, Float money) {
		getJdbcTemplate().update("update account set money=money-? where id=?", money , id);
	}
}

測試代碼

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class Test {
	@Resource(name="accountService")
	private AccountService accountService;
	@org.junit.Test
	public void test(){
		accountService.transfer(1,2,100f);
	}
}

運行結(jié)果

現(xiàn)在來用三種方式進行事務(wù)控制

方式一:編碼方式(需要修改源代碼,基本不會用)

添加事務(wù)管理類和事務(wù)模板類

    <!-- 事務(wù)核心管理器,封裝了所有事務(wù)操作. 依賴于連接池 -->
    <bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
        <property name="dataSource" ref="dataSource" ></property>
    </bean>
    <!-- 事務(wù)模板對象 -->
    <bean name="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate" >
        <property name="transactionManager" ref="transactionManager" ></property>
    </bean>

修改業(yè)務(wù)層代碼

@Service("accountService")
public class AccountServiceImpl implements AccountService {
	@Resource(name = "accountDao")
	AccountDao accountDao;
	@Resource(name="transactionTemplate")
	private TransactionTemplate transactionTemplate;
	public void transfer(final Integer from, final Integer to, final Float money) {
		transactionTemplate.execute(new TransactionCallbackWithoutResult() {
			@Override
			protected void doInTransactionWithoutResult(TransactionStatus status) {
				accountDao.subMoney(from,money);
				int i = 1/0;
				accountDao.addMoney(to,money);
			}
		});
 
	}
}

方式二:xml配置(不需要改動代碼,直接配置xml)

<!-- 配置事務(wù)通知 -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager" >
        <tx:attributes>
            <!-- 以方法為單位,指定方法應(yīng)用什么事務(wù)屬性
                isolation:隔離級別
                propagation:傳播行為
                read-only:是否只讀
             -->
            <tx:method name="find*" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="true" />
            <tx:method name="transfer" isolation="REPEATABLE_READ" propagation="REQUIRED" read-only="false" />
        </tx:attributes>
    </tx:advice>
    <!-- 配置織入 -->
    <aop:config  >
        <!-- 配置切點表達式 -->
        <aop:pointcut expression="execution(* cn.swun.service.*ServiceImpl.*(..))" id="txPc"/>
        <!-- 配置切面 : 通知+切點
                 advice-ref:通知的名稱
                 pointcut-ref:切點的名稱
         -->
        <aop:advisor advice-ref="txAdvice" pointcut-ref="txPc" />
    </aop:config>

方式三:注解

首先開啟注解管理aop事務(wù),然后打注解

    <!-- 開啟使用注解管理aop事務(wù) -->
    <tx:annotation-driven/>
/*
* 該注解可以打在方法上,也可以打在類上
*/
@Transactional(isolation=Isolation.REPEATABLE_READ,propagation=Propagation.REQUIRED,readOnly=false)
public void transfer(final Integer from, final Integer to, final Float money) {
	accountDao.subMoney(from,money);
	int i = 1/0;
	accountDao.addMoney(to,money);
}

spring是如何控制事務(wù)的?

Spring 的事務(wù),可以說是 Spring AOP 的一種實現(xiàn)。

AOP面向切面編程,即在不修改源代碼的情況下,對原有功能進行擴展,通過代理類來對具體類進行操作。

spring是一個容器,通過spring這個容器來對對象進行管理,根據(jù)配置文件來實現(xiàn)spring對對象的管理。

spring的事務(wù)聲明有兩種方式,編程式和聲明式。spring主要是通過“聲明式事務(wù)”的方式對事務(wù)進行管理,即在配置文件中進行聲明,通過AOP將事務(wù)切面切入程序,最大的好處是大大減少了代碼量。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java中List分片方式詳細解析

    Java中List分片方式詳細解析

    這篇文章主要介紹了Java中List分片方式詳細解析,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • SpringBoot發(fā)現(xiàn)最新版Druid重大問題(坑)

    SpringBoot發(fā)現(xiàn)最新版Druid重大問題(坑)

    這篇文章主要介紹了SpringBoot發(fā)現(xiàn)最新版Druid重大問題(坑),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2020-09-09
  • IntelliJ IDEA的build path設(shè)置方法

    IntelliJ IDEA的build path設(shè)置方法

    這篇文章主要介紹了IntelliJ IDEA的build path設(shè)置方法,本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • java編程ThreadLocal上下傳遞源碼解析

    java編程ThreadLocal上下傳遞源碼解析

    這篇文章主要為大家介紹了java編程中ThreadLocal提供的上下傳遞方式的源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • JavaWeb實現(xiàn)RSA+AES混合加密

    JavaWeb實現(xiàn)RSA+AES混合加密

    RSA+AES的混合加密時,AES用于給傳輸?shù)臄?shù)據(jù)加密,然后通過RSA給AES的秘鑰加密,本文就來詳細的介紹一下如何實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • 基于傳遞list類型的參數(shù)的問題

    基于傳遞list類型的參數(shù)的問題

    這篇文章主要介紹了基于傳遞list類型的參數(shù)的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Java編程發(fā)展歷史(動力節(jié)點Java學(xué)院整理)

    Java編程發(fā)展歷史(動力節(jié)點Java學(xué)院整理)

    Java的歷史可以追溯到1991年4月,Sun公司的James Gosling領(lǐng)導(dǎo)的綠色計劃(Green Project)開始著力發(fā)展一種分布式系統(tǒng)結(jié)構(gòu),使其能夠在各種消費性電子產(chǎn)品上運行,他們使用了C/C++/Oak語言。由于多種原因,綠色計劃逐漸陷于停滯狀態(tài)
    2017-03-03
  • Spring?Boot日志的策略解析與門面模式

    Spring?Boot日志的策略解析與門面模式

    這篇文章主要介紹了Spring?Boot日志的策略解析與門面模式,日志對我們來說并不陌?,通過打印日志來發(fā)現(xiàn)和定位問題,或者根據(jù)日志來分析程序的運行過程,Spring?Boot中的日志管理是非常重要的,需要的朋友可以參考下
    2024-05-05
  • Mybatis-Plus中updateById方法不能更新空值問題解決

    Mybatis-Plus中updateById方法不能更新空值問題解決

    本文主要介紹了Mybatis-Plus中updateById方法不能更新空值問題解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2022-08-08
  • Spring RestTemplate的使用與踩坑

    Spring RestTemplate的使用與踩坑

    RestTemplate是一個執(zhí)行HTTP請求的同步阻塞式工具類,它僅僅只是在HTTP客戶端庫基礎(chǔ)上,封裝了更加簡單易用的模板方法API,方便程序員利用已提供的模板方法發(fā)起網(wǎng)絡(luò)請求和處理,能很大程度上提升我們的開發(fā)效率
    2023-02-02

最新評論

友谊县| 怀远县| 东明县| 明溪县| 梧州市| 门源| 静安区| 小金县| 新河县| 平山县| 昌吉市| 台南县| 静宁县| 双流县| 宝丰县| 梅河口市| 沅陵县| 安义县| 乐陵市| 延庆县| 蓝田县| 宝丰县| 黄大仙区| 镇远县| 休宁县| 禄丰县| 章丘市| 太原市| 武宣县| 芮城县| 镇远县| 正镶白旗| 呈贡县| 五莲县| 平安县| 吉安市| 八宿县| 满洲里市| 大理市| 庆安县| 邵阳市|