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

資訊專欄INFORMATION COLUMN

理解 Java AOP 《一》

GeekGhc / 2792人閱讀

摘要:擴展了語言,定義了語法,所以它有一個專門的編譯器用來生成遵守字節碼規范的文件注意此,非。只是提供了和語法一致的語義注解,兩者是完全不同的實現。修改類運行時,在內通過轉換類的字節碼,把橫切邏輯織入到目標類中。

AOP概述

AOP(Aspect-Oriented Programming,面向切面的編程)是一種編程范式,專注于解耦業務邏輯和橫切邏輯,從而達到提升內聚和模塊化的目的。

業務邏輯 :處理業務的邏輯。

橫切邏輯 :通常固定的出現在業務邏輯的邊界處,在進入業務邏輯前或執行業務邏輯后做一些事情。

看一個例子:

橫切邏輯

public class PerformanceMonitor {

    public void start() {
        System.out.println("開始時間: " + String.valueOf(System.currentTimeMillis()));
    }

    public void end() {
        System.out.println("結束時間: " + String.valueOf(System.currentTimeMillis()));
    }
}

業務邏輯

public class Biz {

    private PerformanceMonitor pMonitor = new PerformanceMonitor();

    public void doSomething() {
        pMonitor.start();
        System.out.println("做一些業務邏輯");
        pMonitor.end();
    }

    public static void main(String [] args) {
        Biz biz = new Biz();
        biz.doSomething();
    }
}

上面例子中,我們希望通過PerformanceMonitor打印業務執行開始和結束時間,乍眼一看似乎沒毛病。

那問題來了,如果我希望:

在調試階段才打印開始和結束時間,應用發布后不打印。

希望在其他業務邏輯開始和結束的時候也打印時間。

按照現在的處理方式,業務邏輯和橫切邏輯耦合在了一起,需要滿足上述需求的話,需要修改代碼后再重新編譯,顯然這種處理方式不夠優美。

AOP就是一種優美的處理方式,如下:

Java AOP的實現方式

Java中實現AOP的方式分 靜態AOP動態AOP 兩大類,下面分別列舉。

靜態AOP

在編譯期間,橫切邏輯直接以字節碼形式編譯到業務邏輯的字節碼文件中,通常需要特殊的編譯器。

Aspectj

Aspectj擴展了java語言,定義了AOP語法,所以它有一個專門的編譯器(ajc)用來生成遵守Java字節碼規范的Class文件

注意 : 此Aspectj,非Spring Aspectj。Spring Aspectj只是提供了和Aspectj AOP語法一致的語義注解,兩者是完全不同的實現。

動態AOP

在運行期間,通過修改目標類的字節碼、生成類的子類或代理類織入橫切邏輯。

生成接口代理類(JDK動態代理)

運行時,通過為目標類實現的接口動態生成代理類,把橫切邏輯織入到代理類中。

生成子類

運行時,通過為目標類生成子類,把橫切邏輯織入到子類中。

自定義 ClassLoader(修改類)

運行時,在類加載器加載類的時候,修改目標類的字節碼,把橫切邏輯織入到目標類中。

ClassFileTransformer(修改類)

運行時,在Java Agent內通過Instrumentation轉換類的字節碼,把橫切邏輯織入到目標類中。

AOP方式比較
AOP方式 效率 實現接口 final method 其他特點
Aspectj 編譯效率低,運行效率高 不需要 支持 -
JDK動態代理 生成代理效率高,執行效率低 需要 N/A 通過反射方式調業務邏輯
生成子類 生成子類效率低,執行效率高 不需要 不支持 -
自定義 ClassLoader 加載效率低,執行效率高 不需要 支持 只能對自動義類加載器加載的類織入
ClassFileTransformer 加載效率低,執行效率高 不需要 支持 對所有類織入

PS :未完待續,后續章節針對每一種AOP方式舉例,實現PerformanceMonitor橫切邏輯的織入。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/67436.html

相關文章

  • Spring AOP就是這么簡單啦

    摘要:是一種特殊的增強切面切面由切點和增強通知組成,它既包括了橫切邏輯的定義也包括了連接點的定義。實際上,一個的實現被拆分到多個類中在中聲明切面我們知道注解很方便,但是,要想使用注解的方式使用就必須要有源碼因為我們要 前言 只有光頭才能變強 上一篇已經講解了Spring IOC知識點一網打盡!,這篇主要是講解Spring的AOP模塊~ 之前我已經寫過一篇關于AOP的文章了,那篇把比較重要的知...

    Jacendfeng 評論0 收藏0
  • 從源碼入手,文帶你讀懂Spring AOP面向切面編程

    摘要:,,面向切面編程。,切點,切面匹配連接點的點,一般與切點表達式相關,就是切面如何切點。例子中,注解就是切點表達式,匹配對應的連接點,通知,指在切面的某個特定的連接點上執行的動作。,織入,將作用在的過程。因為源碼都是英文寫的。 之前《零基礎帶你看Spring源碼——IOC控制反轉》詳細講了Spring容器的初始化和加載的原理,后面《你真的完全了解Java動態代理嗎?看這篇就夠了》介紹了下...

    wawor4827 評論0 收藏0
  • Spring框架學習筆記():官方文檔介紹,IoC與AOP概念學習

    摘要:構造函數注入通過調用類的構造函數,將接口實現類通過構造函數變量傳入。而在中,其使用橫切技術,將這類代碼從原屬的封裝對象中提取出來,封裝到一個可重用模塊中,稱為。 最近實習用到Spring的開發框架,但是之前沒有接觸過,因此希望利用網上的資源來學習以下。 Spring官方給出了非常全面的介紹,非常適合我這種完全的小白……在這一系列學習中,我閱讀的主要資源是5.1.2 Reference ...

    mindwind 評論0 收藏0
  • Java 代理模式與 AOP

    摘要:本文首發于作者最近在學,研究了下和代理模式,寫點心得和大家分享下。所以下面來重點分析下代理模式。這里代理模式分為靜態代理和動態代理兩種,我們分別來看下。代理模式,代理,意味著有一方代替另一方完成一件事。 本文首發于 https://jaychen.cc作者 jaychen 最近在學 Spring,研究了下 AOP 和代理模式,寫點心得和大家分享下。 AOP 先說下AOP,AOP 全稱 ...

    jk_v1 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<