bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

SpringAOP的原理和使用方法

這篇文章主要介紹“Spring AOP的原理和使用方法”,在日常操作中,相信很多人在Spring AOP的原理和使用方法問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Spring AOP的原理和使用方法”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

創新互聯,是成都地區的互聯網解決方案提供商,用心服務為企業提供網站建設、成都app軟件開發公司小程序開發、系統專業公司和微信代運營服務。經過數十余年的沉淀與積累,沉淀的是技術和服務,讓客戶少走彎路,踏實做事,誠實做人,用情服務,致力做一個負責任、受尊敬的企業。對客戶負責,就是對自己負責,對企業負責。

spring 兩大特性IOC(bean交給容器管理), AOP(面向切面編程,是一種編程思想)

1. 什么是aop

AOP (Aspect Orient Programming),直譯過來就是 面向切面編程。AOP 是一種編程思想,是面向對象編程(OOP)的一種補充。面向對象編程將程序抽象成各個層次的對象,而面向切面編程是將程序抽象成各個切面。

Spring AOP的原理和使用方法

2 aop 實現方式

1,靜態代理

根據需要,為每個類實現代理,不夠靈活,

2,動態代理, 使用JDK實現

// ClassLoader 被代理類類加載器
// interfaces  被代理類接口集合
// InvocationHandler 接口的實現類, 主要是重寫invoke 方法
Proxy.newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)

spring 默認使用的方式,比較靈活,在內存中生成了一個和代理類相同接口的類,所以實例化后,只能用接口接受,

缺點: 類必須實現了接口,代理類用接口接受,

3,動態代理,CGLIN實現,底層是字節碼

使用方式和JDK 一樣

不同點: 對于沒有接口的類,也可以代理,底層是用字節碼實現

3. aop 通知方式

Before:方法執行前執行 

After:方法返回后或異常后執行 ,先于AfterThrowing, AfterReturning 執行

AfterThrowing: 方法異常后執行

AfterReturning 方法返回后執行

Around: 環繞方法

4, 切點表達式

* com.study.common..*.*(..)  第一個* 表示范圍,返回類型(可省略), 類路徑,一個點表示當前路徑,兩個點表示子及 子孫包,* 表示包含任意路徑, 最后一個* 匹配所有方法,(..) 方法的參數, ..  表示任意參數

使用@Aspect 標注的類,是切面,

@Pointcut 是切點,后面接切點表達式

execution:用于匹配連接點的執行方法,

within 只能到類,

args:限制切入點到參數,

this,target: 都只能切到類或者接口。對于切入的類,如果實現了接口, this前后環繞不生效,target 沒有影響

annotation: 根據注解切入

多個表達式,可以用&& ,|| 

5,事物

5.1 事物:四大特性(ACID),

原子性(Atomicity),強調的是一整件事的完整性, 這件事的過程必須全部完成(買東西,付款,發貨,收貨)

一致性(Consistency),強調一種狀態變為另一種狀態,并且全部完成(取錢后 -> 銀行,個人錢的總數較之前不變)

隔離性(Isolation),當前事物不受別的事物影響

持久性(Durability),已提交的事物,永久生效

5.2 隔離級別  Isolation

臟讀:一個事物,讀取了另一個事物未提交的數據

不可重復讀(行級鎖):一個事物讀取另一個事物修改的數據

幻讀(表級鎖):一個事物讀取另一個事物inset,delete 數據

Spring AOP的原理和使用方法

讀未提交(READ_UNCOMMITTED),讀已提交(READ_COMMITTED),可重復讀(REPEATABLE_READ),串行化:(SERIALIZABLE)

MySQL 默認可重復讀,行鎖

oracle 默認serializable, 表鎖

5.3 傳播行為

public class LogTest{
    @Transactional
    public void buy() {
        sub();
        add();
        log();
        saveLog();
    }
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void log() {
        // 父方法沒有事物,當前方法開啟一個新事物
        // 父方法開啟事物,將父方法事物掛起,這里新開一個事物,執行完再執行父事物
        System.out.println("不管父方法是否扣款,都會記錄日志到數據庫");
    }
    @Transactional(propagation = Propagation.REQUIRED)
    public void sub() {
        // 如果父方法buy 也開啟了事物, 則加入父事物
        System.out.println("扣款方法");
    }
    @Transactional(propagation = Propagation.REQUIRED)
    public void add() {
        // 如果父方法buy 也開啟了事物, 則加入父事物
        System.out.println("存款方法");
    }
    @Transactional(propagation = Propagation.SUPPORTS)
    public void saveLog() {
        // saveLog方法不單獨開啟事物,如果有父事物就加入會一起回滾
        System.out.println("只是記錄日志");
    }
}

到此,關于“Spring AOP的原理和使用方法”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注創新互聯網站,小編會繼續努力為大家帶來更多實用的文章!

本文題目:SpringAOP的原理和使用方法
URL鏈接:http://vcdvsql.cn/article2/pdedoc.html

成都網站建設公司_創新互聯,為您提供網站內鏈網站收錄網站建設標簽優化App設計軟件開發

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都做網站