国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Spring編程式和聲明式事務(wù)實(shí)例講解

lushan / 3255人閱讀

摘要:基于和命名空間的聲明式事務(wù)管理目前推薦的方式,其最大特點(diǎn)是與結(jié)合緊密,可以充分利用切點(diǎn)表達(dá)式的強(qiáng)大支持,使得管理事務(wù)更加靈活。基于的全注解方式將聲明式事務(wù)管理簡(jiǎn)化到了極致。

Java面試通關(guān)手冊(cè)(Java學(xué)習(xí)指南):https://github.com/Snailclimb/Java_Guide

歷史回顧:
可能是最漂亮的Spring事務(wù)管理詳解

Spring事務(wù)管理
Spring支持兩種方式的事務(wù)管理:

編程式事務(wù)管理: 通過(guò)Transaction Template手動(dòng)管理事務(wù),實(shí)際應(yīng)用中很少使用,

使用XML配置聲明式事務(wù): 推薦使用(代碼侵入性最小),實(shí)際是通過(guò)AOP實(shí)現(xiàn)

實(shí)現(xiàn)聲明式事務(wù)的四種方式:

基于 TransactionInterceptor 的聲明式事務(wù): Spring 聲明式事務(wù)的基礎(chǔ),通常也不建議使用這種方式,但是與前面一樣,了解這種方式對(duì)理解 Spring 聲明式事務(wù)有很大作用。

基于 TransactionProxyFactoryBean 的聲明式事務(wù): 第一種方式的改進(jìn)版本,簡(jiǎn)化的配置文件的書寫,這是 Spring 早期推薦的聲明式事務(wù)管理方式,但是在 Spring 2.0 中已經(jīng)不推薦了。

基于< tx> 和< aop>命名空間的聲明式事務(wù)管理: 目前推薦的方式,其最大特點(diǎn)是與 Spring AOP 結(jié)合緊密,可以充分利用切點(diǎn)表達(dá)式的強(qiáng)大支持,使得管理事務(wù)更加靈活。

基于 @Transactional 的全注解方式: 將聲明式事務(wù)管理簡(jiǎn)化到了極致。開發(fā)人員只需在配置文件中加上一行啟用相關(guān)后處理 Bean 的配置,然后在需要實(shí)施事務(wù)管理的方法或者類上使用 @Transactional 指定事務(wù)規(guī)則即可實(shí)現(xiàn)事務(wù)管理,而且功能也不必其他方式遜色。

我們今天要將的是使用編程式以及基于AspectJ的聲明式和基于注解的事務(wù)方式,實(shí)現(xiàn)爛大街的轉(zhuǎn)賬業(yè)務(wù)。

再來(lái)說(shuō)一下這個(gè)案例的思想吧,我們?cè)趦纱无D(zhuǎn)賬之間添加一個(gè)錯(cuò)誤語(yǔ)句(對(duì)應(yīng)銀行斷電等意外情況),如果這個(gè)時(shí)候兩次轉(zhuǎn)賬不能成功,則說(shuō)明事務(wù)配置正確,否則,事務(wù)配置不正確。

你需要完成的任務(wù):

使用編程式事務(wù)管理完成轉(zhuǎn)賬業(yè)務(wù)

使用基于AspectJ的聲明式事務(wù)管理完成轉(zhuǎn)賬業(yè)務(wù)

使用基于 @Transactional 的全注解方式事務(wù)管理完成轉(zhuǎn)賬業(yè)務(wù)

備注:

下面的代碼是在很久之前,我剛學(xué)Sping還沒有接觸Maven的時(shí)候?qū)懙模晕沂褂玫脑继砑觠ar的方式,使用Maven的小伙伴可以自行添加Maven依賴,沒有使用Maven的小伙伴直接使用我下面提供的jar包即可。

jar包地址:鏈接:https://pan.baidu.com/s/1tqy-mVKxSutsIIvYgtC3Rw 密碼:nid0

項(xiàng)目結(jié)構(gòu):

開發(fā)工具:

Myeclipse2017

SQL:

create table `account` (
    `username` varchar (99),
    `salary` int (11)
); 
insert into `account` (`username`, `salary`) values("小王","3000");
insert into `account` (`username`, `salary`) values("小馬","3000");
(1)編程式事務(wù)管理

注意: 通過(guò)添加/刪除accountMoney() 方法中int i = 10 / 0這個(gè)語(yǔ)句便可驗(yàn)證事務(wù)管理是否配置正確。

OrdersDao.java(Dao層)

package cn.itcast.dao;

import org.springframework.jdbc.core.JdbcTemplate;

public class OrdersDao {
    // 注入jdbcTemplate模板對(duì)象
    private JdbcTemplate jdbcTemplate;

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    // 對(duì)數(shù)據(jù)操作的方法不包含業(yè)務(wù)操作
    /**
     * 小王少錢的方法
     */
    public void reduceMoney() {
        String sql = "update account set salary=salary-? where username=?";
        jdbcTemplate.update(sql, 1000, "小王");
    }

    /**
     * 小馬多錢的方法
     */
    public void addMoney() {
        String sql = "update account set salary=salary+? where username=?";
        jdbcTemplate.update(sql, 1000, "小馬");
    }
}

OrdersService.java(業(yè)務(wù)邏輯層)

package cn.itcast.service;

import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallback;
import org.springframework.transaction.support.TransactionTemplate;

import cn.itcast.dao.OrdersDao;

public class OrdersService {
    // 注入Dao層對(duì)象
    private OrdersDao ordersDao;

    public void setOrdersDao(OrdersDao ordersDao) {
        this.ordersDao = ordersDao;
    }

    // 注入TransactionTemplate對(duì)象
    private TransactionTemplate transactionTemplate;

    public void setTransactionTemplate(TransactionTemplate transactionTemplate) {
        this.transactionTemplate = transactionTemplate;
    }

    // 調(diào)用dao的方法
    // 業(yè)務(wù)邏輯,寫轉(zhuǎn)賬業(yè)務(wù)
    public void accountMoney() {
        transactionTemplate.execute(new TransactionCallback() {

            @Override
            public Object doInTransaction(TransactionStatus status) {
                Object result = null;
                try {
                    // 小馬多1000
                    ordersDao.addMoney();
                    // 加入出現(xiàn)異常如下面int
                    // i=10/0(銀行中可能為突然停電等。。。);結(jié)果:小馬賬戶多了1000而小王賬戶沒有少錢
                    // 解決辦法是出現(xiàn)異常后進(jìn)行事務(wù)回滾
                    int i = 10 / 0;// 事務(wù)管理配置后異常已經(jīng)解決
                    // 小王 少1000
                    ordersDao.reduceMoney();
                } catch (Exception e) {
                    status.setRollbackOnly();
                    result = false;
                    System.out.println("Transfer Error!");
                }

                return result;
            }
        });

    }
}

TestService.java(測(cè)試方法)

package cn.itcast.service;

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

public class TestService {
    @Test
    public void testAdd() {
        ApplicationContext context = new ClassPathXmlApplicationContext(
                "beans.xml");
        OrdersService userService = (OrdersService) context
                .getBean("ordersService");
        userService.accountMoney();
    }
}

配置文件:



    
    
        
        
        
        
        
    
    
    
    
        
        
    

    
    
        
        
    

    
    
        
        
        
    

    
        
    
    
    
        
    
 
(2)基于AspectJ的聲明式事務(wù)管理

OrdersService.java(業(yè)務(wù)邏輯層)

package cn.itcast.service;

import cn.itcast.dao.OrdersDao;

public class OrdersService {
    private OrdersDao ordersDao;

    public void setOrdersDao(OrdersDao ordersDao) {
        this.ordersDao = ordersDao;
    }

    // 調(diào)用dao的方法
    // 業(yè)務(wù)邏輯,寫轉(zhuǎn)賬業(yè)務(wù)
    public void accountMoney() {
        // 小馬多1000
        ordersDao.addMoney();
        // 加入出現(xiàn)異常如下面int i=10/0(銀行中可能為突然停電等。。。);結(jié)果:小馬賬戶多了1000而小王賬戶沒有少錢
        // 解決辦法是出現(xiàn)異常后進(jìn)行事務(wù)回滾
        int i = 10 / 0;// 事務(wù)管理配置后異常已經(jīng)解決
        // 小王 少1000
        ordersDao.reduceMoney();
    }
}

配置文件:

    
    
        
        
        
        
        
    
    
    
        
        
    

    
    
        
        
            
            
            
            
        
    

    
    
        
        
        
        
    


    
    
        
    
    
        
    
    
        
    
(3)基于注解的方式

OrdersService.java(業(yè)務(wù)邏輯層)

package cn.itcast.service;

import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import cn.itcast.dao.OrdersDao;

@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, readOnly = false, timeout = -1)
public class OrdersService {
    private OrdersDao ordersDao;

    public void setOrdersDao(OrdersDao ordersDao) {
        this.ordersDao = ordersDao;
    }

    // 調(diào)用dao的方法
    // 業(yè)務(wù)邏輯,寫轉(zhuǎn)賬業(yè)務(wù)
    public void accountMoney() {
        // 小馬多1000
        ordersDao.addMoney();
        // 加入出現(xiàn)異常如下面int i=10/0(銀行中可能為突然停電等。。。);結(jié)果:小馬賬戶多了1000而小王賬戶沒有少錢
        // 解決辦法是出現(xiàn)異常后進(jìn)行事務(wù)回滾
        // int i = 10 / 0;// 事務(wù)管理配置后異常已經(jīng)解決
        // 小王 少1000
        ordersDao.reduceMoney();
    }
}

配置文件:

    
    
        
        
        
        
        
    
    
    
        
        
    
    
    
    
    
    
    
    
        
    
    
        
    
    
        
    

歡迎關(guān)注我的微信公眾號(hào): "Java面試通關(guān)手冊(cè)" (一個(gè)有溫度的微信公眾號(hào),期待與你共同進(jìn)步~~~堅(jiān)持原創(chuàng),分享美文,分享各種Java學(xué)習(xí)資源):

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/69495.html

相關(guān)文章

  • MyBatis集成Spring

    摘要:各方面有各種常見的良好示例,包括日志記錄,聲明式事務(wù),安全性,緩存等。聲明式事務(wù)管理這意味著你從業(yè)務(wù)代碼中分離事務(wù)管理。但作為一種橫切關(guān)注點(diǎn),聲明式事務(wù)管理可以使用方法進(jìn)行模塊化。支持使用框架的聲明式事務(wù)管理。 本章主要內(nèi)容包括Spring簡(jiǎn)介、Spring的兩大特性(IOC和AOP)、事務(wù)MyBatis集成Spring等。也許有讀者會(huì)疑惑,明明是MyBatis-Plus實(shí)戰(zhàn),怎么還講...

    ckllj 評(píng)論0 收藏0
  • Spring知識(shí)——事務(wù)解析

    摘要:編程式事務(wù)指的是通過(guò)編碼方式實(shí)現(xiàn)事務(wù)聲明式事務(wù)基于將具體業(yè)務(wù)邏輯與事務(wù)處理解耦。聲明式事務(wù)管理使業(yè)務(wù)代碼邏輯不受污染因此在實(shí)際使用中聲明式事務(wù)用的比較多。聲明式事務(wù)有兩種方式,一種是在配置文件中做相關(guān)的事務(wù)規(guī)則聲明,另一種是基于注解的方式。 事務(wù)管理是應(yīng)用系統(tǒng)開發(fā)中必不可少的一部分。Spring 為事務(wù)管理提供了豐富的功能支持。Spring 事務(wù)管理分為編碼式和聲明式的兩種方式。編程式...

    tuomao 評(píng)論0 收藏0
  • 可能是最漂亮的Spring事務(wù)管理詳解

    摘要:事務(wù)隔離級(jí)別定義了一個(gè)事務(wù)可能受其他并發(fā)事務(wù)影響的程度我們先來(lái)看一下并發(fā)事務(wù)帶來(lái)的問(wèn)題,然后再來(lái)介紹一下接口中定義了五個(gè)表示隔離級(jí)別的常量。 Java面試通關(guān)手冊(cè)(Java學(xué)習(xí)指南):https://github.com/Snailclimb/Java_Guide 微信閱讀地址鏈接:可能是最漂亮的Spring事務(wù)管理詳解 事務(wù)概念回顧 什么是事務(wù)? 事務(wù)是邏輯上的一組操作,要么都執(zhí)行,...

    鄒立鵬 評(píng)論0 收藏0
  • <spring 3.x企業(yè)應(yīng)用開發(fā)實(shí)戰(zhàn)>讀書筆記-基于注解和聲明式的aop

    摘要:配置切面編程方式實(shí)現(xiàn)說(shuō)結(jié)賬說(shuō)要點(diǎn)什么注解表示前置增強(qiáng)后面的切點(diǎn)表達(dá)式表示在目標(biāo)類的方法織入增強(qiáng),方法可以帶任意的傳入?yún)?shù)和任意的返回值。類相當(dāng)于上一篇中的增強(qiáng)切點(diǎn),切面三者聯(lián)合表達(dá)的信息。 @AspectJ配置切面 編程方式實(shí)現(xiàn) public class Waiter { public void check(String name){ System.out.pr...

    馬龍駒 評(píng)論0 收藏0
  • Vue-router基本學(xué)習(xí)(1)

    摘要:?jiǎn)雾?yè)面應(yīng)用網(wǎng)頁(yè)只有在第一次進(jìn)入頁(yè)面的的時(shí)候請(qǐng)求服務(wù)器的文件,接下來(lái)的頁(yè)面跳轉(zhuǎn)是基于內(nèi)部的。單頁(yè)面應(yīng)用第一次要將所有的資源全部加載,所以首屏?xí)r間慢,但是后續(xù)的跳轉(zhuǎn)不需要再次向服務(wù)器發(fā)請(qǐng)求。 多頁(yè)面應(yīng)用:網(wǎng)頁(yè)HTML文件是請(qǐng)求后臺(tái)發(fā)過(guò)來(lái)的。每次切換頁(yè)面都會(huì)從后臺(tái)把頁(yè)面文件傳輸回來(lái)。單頁(yè)面應(yīng)用:網(wǎng)頁(yè)只有在第一次進(jìn)入頁(yè)面的、的時(shí)候請(qǐng)求服務(wù)器的HTML文件,接下來(lái)的頁(yè)面跳轉(zhuǎn)是基于內(nèi)部的route...

    IamDLY 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<