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

詳解Spring學(xué)習(xí)之聲明式事務(wù)管理

 更新時間:2017年07月17日 11:48:47   作者:顏洛濱  
這篇文章主要介紹了詳解Spring學(xué)習(xí)之聲明式事務(wù)管理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

前言

在前面的小節(jié)中,我們學(xué)習(xí)了關(guān)于事務(wù)的概念以及事務(wù)管理的重要性,并且通過編程使用Spring的編程式事務(wù)管理進行操作,加深對事務(wù)管理的重要性的學(xué)習(xí),不過,由于編程式的事務(wù)管理使用起來不是很方便,所以在日常的開發(fā)中基本不怎么使用,接下來的內(nèi)容我們將學(xué)習(xí)使用Spring的聲明式事務(wù)管理,這里有一個地方需要明白的是,Spring的聲明式事務(wù)管理的實現(xiàn)方式其實是通過AOP的方式來實現(xiàn)的,也就是為原始的事務(wù)管理對象創(chuàng)建代理對象,從而實現(xiàn)事務(wù)管理增強的

基于TransactionProxyFactoryBean的事務(wù)管理配置

經(jīng)過前面的學(xué)習(xí),可以知道,Spring中配置AOP有三種方式,分別是通過ProxyFactoryBean創(chuàng)建代理,通過XML的方式以及通過注解的方式,既然Spring事務(wù)管理是通過AOP來實現(xiàn)的,那么對應(yīng)的就有三種不同的方式,首先來看下基于TransactionProxyFactoryBean的管理方式

首先是Spring的配置文件

<?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:context="http://www.springframework.org/schema/context"
    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.xsd">

  <!--開啟自動掃描-->
  <context:component-scan base-package="cn.xuhuanfeng.transaction"/>

  <!--配置數(shù)據(jù)源,這里采用dbcp-->
  <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="url" value="jdbc:mysql://localhost:3306/spring"/>
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="username" value="root"/>
    <property name="password" value="huanfeng"/>
  </bean>

  <!--配置JdbcTemplate-->
  <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <!--注入數(shù)據(jù)源-->
    <property name="dataSource" ref="dataSource"/>
  </bean>

  <!--配置事務(wù)管理-->
  <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <!--注入數(shù)據(jù)源-->
    <property name="dataSource" ref="dataSource"/>
  </bean>
  <!--為AccountService創(chuàng)建代理類-->
  <bean id="accountServiceProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <!--注入事務(wù)管理-->
    <property name="transactionManager" ref="transactionManager"/>
    <!--注入目標(biāo)類,也就是所要增強的類-->
    <property name="target" ref="accountService"/>
    <!--配置相應(yīng)的事務(wù)屬性-->
    <property name="transactionAttributes">
      <props>
        <!--指定不同的事務(wù)的處理方式
          配置格式:事務(wù)傳播方式,隔離級別,readOnly,-Exception,+Exception
          傳播行為是唯一必須配置的,其他的如果不配置則使用默認(rèn)
          -Exception表示如果發(fā)生對應(yīng)的異常,則回滾事務(wù)
          +Exception表示即使發(fā)生對應(yīng)的異常,也依舊提交事務(wù)
        -->
        <prop key="transfer">PROPAGATION_REQUIRED,ISOLATION_DEFAULT</prop>
      </props>
    </property>
  </bean>
</beans>

對應(yīng)的持久層代碼

@Repository
public class AccountDao {

  @Autowired
  private JdbcTemplate jdbcTemplate;

  public void transferIn(String name, double money){
    String sql = "update account set money = money + ? where name = ?";

    jdbcTemplate.update(sql, money, name);
  }

  public void transferOut(String name, double money){
    String sql = "update account set money = money - ? where name = ?";

    jdbcTemplate.update(sql, money, name);
  }
}

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

@Service
public class AccountService {

@Autowired
private AccountDao accountDao;

public void transfer(final String fromName,final String toName,final double money){

  accountDao.transferOut(fromName, money);
  int d = 1/0; // 除0異常
  accountDao.transferIn(toName, money);
}
}

通過上面的配置之后,當(dāng)我們在使用AccountService的時候,由于獲取的對象的代理后的對象,所以Spring會自動進行事務(wù)的監(jiān)管,而我們需要做的就是配置對應(yīng)的事務(wù)傳播類型以及事務(wù)管理級別等的信息,這種方式明顯對代碼以及沒有什么侵入了,但是使用這種方式意味著沒有都需要為不同的服務(wù)對象創(chuàng)建對應(yīng)的代理對象,這其實是不太方便的,接下來我們來看下使用aop/tx命名空間來進行配置的方式。

基于aop/tx命名空間的事務(wù)管理配置

由于是對上面的業(yè)務(wù)操作進行事務(wù)管理,而且經(jīng)過上一小節(jié)的學(xué)習(xí),我們也基本熟悉了該業(yè)務(wù),所以這里直接演示配置的代碼

<?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:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
    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.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd 
    http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop.xsd">

  <!--
    這里配置同前,故省略
  -->

  <!--aop配置-->
  <aop:config>
    <!--配置切點-->
    <aop:pointcut id="serviceMethod" expression="execution(* cn.xuhuanfeng.transaction.AccountService.*(..))"/>
    <!--對應(yīng)的切面-->
    <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethod"/>
  </aop:config>

  <!--配置事務(wù)增強-->
  <tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
      <!--配置對應(yīng)的事務(wù)管理,其中name為與事務(wù)相關(guān)的方法名,可以使用通配符-->
      <tx:method name="transfer*" isolation="DEFAULT" propagation="REQUIRED"/>
    </tx:attributes>
  </tx:advice>

</beans>

可以看到,通過XML配置的方式,可以更加靈活地進行事務(wù)管理

基于注解的事務(wù)管理配置

基于注解的配置方式提供了更加簡單的配置方式,只需要使用@Transactional注解進行標(biāo)注,并且開啟對應(yīng)的掃描即可。

// 配置相應(yīng)的隔離級別、事務(wù)傳播等
@Transactional(isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED)
@Service
public class AccountService {
  // 省略其他內(nèi)容
}

Spring配置文件也相對比較簡單了

<?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:context="http://www.springframework.org/schema/context"
    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.xsd
    http://www.springframework.org/schema/tx
    http://www.springframework.org/schema/tx/spring-tx.xsd">

  <!--數(shù)據(jù)源配置等同上-->
  <!--通過tx命名空間,開啟主機自動掃描,并且注入事務(wù)管理器-->
  <tx:annotation-driven transaction-manager="transactionManager"/>
</beans>

可以看到,通過注解配置的方式是最簡單的配置方式,在日常的開發(fā)中,這種方式的使用的頻率也比較高

總結(jié)

本小節(jié)主要學(xué)習(xí)了Spring聲明式事務(wù)管理的配置,包括了使用TransactionProxyFactoryBean、通過aop/tx命名空間的XML配置以及基于注解的配置方式,其中,基于注解的配置方式是比較簡單的,也是使用頻率比較高的一種

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Maven發(fā)布項目到Nexus私有服務(wù)器

    Maven發(fā)布項目到Nexus私有服務(wù)器

    本文主要介紹了Maven發(fā)布項目到Nexus私有服務(wù)器,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Java中List轉(zhuǎn)Map List實現(xiàn)的幾種姿勢

    Java中List轉(zhuǎn)Map List實現(xiàn)的幾種姿勢

    本文主要介紹了Java中List轉(zhuǎn)Map List實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • java編寫屬于自己的線程池

    java編寫屬于自己的線程池

    這篇文章主要為大家詳細(xì)介紹了java編寫屬于自己的線程池,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Java使用cookie顯示最近查看過的書

    Java使用cookie顯示最近查看過的書

    這篇文章主要為大家詳細(xì)介紹了Java使用cookie顯示最近查看過的書,感興趣的小伙伴們可以參考一下
    2016-04-04
  • Java設(shè)計模式之初識行為型模式

    Java設(shè)計模式之初識行為型模式

    今天帶大家學(xué)習(xí)Java設(shè)計模式的相關(guān)知識點,文中對Java行為型模式做了非常詳細(xì)的介紹及代碼示例,對正在學(xué)習(xí)java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • 超詳細(xì)的Java 問題排查工具單

    超詳細(xì)的Java 問題排查工具單

    這篇文章主要介紹了超詳細(xì)的Java 問題排查工具單,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Java定時任務(wù):利用java Timer類實現(xiàn)定時執(zhí)行任務(wù)的功能

    Java定時任務(wù):利用java Timer類實現(xiàn)定時執(zhí)行任務(wù)的功能

    本篇文章主要介紹了利用java Timer類實現(xiàn)定時執(zhí)行任務(wù)的功能,具有一定的參考價值,有需要的可以了解一下。
    2016-11-11
  • RestTemplate使用不當(dāng)引發(fā)的問題及解決

    RestTemplate使用不當(dāng)引發(fā)的問題及解決

    這篇文章主要介紹了RestTemplate使用不當(dāng)引發(fā)的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Spring基于advisor配置aop過程解析

    Spring基于advisor配置aop過程解析

    這篇文章主要介紹了Spring基于advisor配置aop過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • 解析springcloud中的Hystrix

    解析springcloud中的Hystrix

    Hystrix是一個用于處理分布式系統(tǒng)的延遲和容錯的開源庫,在分布式系統(tǒng)里,許多依賴不可避免的會調(diào)用失敗,比如超時、異常等。這篇文章主要介紹了springcloud中的Hystrix,需要的朋友可以參考下
    2020-10-10

最新評論

梅河口市| 马龙县| 那曲县| 江西省| 曲水县| 静安区| 巫溪县| 云南省| 青海省| 抚顺县| 安溪县| 丹江口市| 札达县| 彭水| 右玉县| 伊川县| 通化县| 尖扎县| 宁远县| 依安县| 普兰店市| 板桥市| 兴安县| 民乐县| 临武县| 太保市| 蓬莱市| 巩留县| 通化市| 西盟| 松江区| 美姑县| 阿克陶县| 洛扎县| 西和县| 唐河县| 章丘市| 平潭县| 三门县| 台中县| 滁州市|