国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - spring控制事務(wù)的三種方式小結(jié)

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

2022-02-12 15:35崇尚至簡(jiǎn) Java教程

這篇文章主要介紹了spring控制事務(wù)的三種方式小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

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

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

數(shù)據(jù)庫(kù)準(zhǔn)備

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

業(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);
	}
}

測(cè)試代碼

@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);
	}
}

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

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

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

 

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

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

  <!-- 事務(wù)核心管理器,封裝了所有事務(wù)操作. 依賴(lài)于連接池 -->
  <bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
      <property name="dataSource" ref="dataSource" ></property>
  </bean>
  <!-- 事務(wù)模板對(duì)象 -->
  <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配置(不需要改動(dòng)代碼,直接配置xml)

<!-- 配置事務(wù)通知 -->
  <tx:advice id="txAdvice" transaction-manager="transactionManager" >
      <tx:attributes>
          <!-- 以方法為單位,指定方法應(yīng)用什么事務(wù)屬性
              isolation:隔離級(jí)別
              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  >
      <!-- 配置切點(diǎn)表達(dá)式 -->
      <aop:pointcut expression="execution(* cn.swun.service.*ServiceImpl.*(..))" id="txPc"/>
      <!-- 配置切面 : 通知+切點(diǎn)
               advice-ref:通知的名稱(chēng)
               pointcut-ref:切點(diǎn)的名稱(chēng)
       -->
      <aop:advisor advice-ref="txAdvice" pointcut-ref="txPc" />
  </aop:config>

 

方式三:注解

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

  <!-- 開(kāi)啟使用注解管理aop事務(wù) -->
  <tx:annotation-driven/>
/*
* 該注解可以打在方法上,也可以打在類(lèi)上
*/
@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ù),可以說(shuō)是 Spring AOP 的一種實(shí)現(xiàn)。

AOP面向切面編程,即在不修改源代碼的情況下,對(duì)原有功能進(jìn)行擴(kuò)展,通過(guò)代理類(lèi)來(lái)對(duì)具體類(lèi)進(jìn)行操作。

spring是一個(gè)容器,通過(guò)spring這個(gè)容器來(lái)對(duì)對(duì)象進(jìn)行管理,根據(jù)配置文件來(lái)實(shí)現(xiàn)spring對(duì)對(duì)象的管理。

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

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://blog.csdn.net/qq_38634814/article/details/82429756

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日韩精品免费在线视频 | 91麻豆精品国产91久久久更新资源速度超快 | 国产精品免费精品自在线观看 | 成人在线免费小视频 | 免费在线a | 国产成人综合av | 国产精彩视频 | 欧美激情一区二区 | 久久精品一区 | 91麻豆产精品久久久久久 | 欧美成人午夜 | 日日操av| 日本欧美在线观看 | 成人免费xxxxx在线视频软件 | 一级电影在线观看 | 久久99深爱久久99精品 | 亚洲视频在线观看 | 亚洲国产精品久久人人爱 | 81精品国产乱码久久久久久 | 欧美日韩视频在线观看免费 | 一级黄色片子看看 | 精品国产一区二区三区在线观看 | 狼人狠狠干 | 国产成人免费 | 一级片在线观看网站 | 日韩av电影在线免费观看 | 一区二区三区日本 | 日韩欧美中文字幕在线视频 | 国产日韩精品视频 | 91亚洲视频 | 久久久精品亚洲 | 成人精品二区 | 日韩视频不卡 | 亚洲毛片在线观看 | 国产毛片毛片 | 国产精品久久久久久久久久久久冷 | 日韩在线观看中文字幕 | 黄色av免费在线 | 97精品国产 | 综合久久精品 | av成人在线观看 |