成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Spring AOP就是這么簡(jiǎn)單啦

Jacendfeng / 3269人閱讀

摘要:是一種特殊的增強(qiáng)切面切面由切點(diǎn)和增強(qiáng)通知組成,它既包括了橫切邏輯的定義也包括了連接點(diǎn)的定義。實(shí)際上,一個(gè)的實(shí)現(xiàn)被拆分到多個(gè)類(lèi)中在中聲明切面我們知道注解很方便,但是,要想使用注解的方式使用就必須要有源碼因?yàn)槲覀円?/p>

前言
只有光頭才能變強(qiáng)

上一篇已經(jīng)講解了Spring IOC知識(shí)點(diǎn)一網(wǎng)打盡!,這篇主要是講解Spring的AOP模塊~

之前我已經(jīng)寫(xiě)過(guò)一篇關(guān)于AOP的文章了,那篇把比較重要的知識(shí)點(diǎn)都講解過(guò)了一篇啦:Spring【AOP模塊】就這么簡(jiǎn)單,很榮幸被開(kāi)源中國(guó)推薦過(guò)~~

如果沒(méi)有AOP的基礎(chǔ),建議先看看上面那篇文章~

如果沒(méi)有代理模式基礎(chǔ),建議先看看:給女朋友講解什么是代理模式這篇文章

如果都看過(guò)了,這篇就放心食用吧!

這篇文章主要是補(bǔ)充和強(qiáng)化一些比較重要的知識(shí)點(diǎn),并會(huì)把上面的兩本書(shū)關(guān)于AOP的知識(shí)點(diǎn)整理出來(lái)并畫(huà)成一個(gè)思維導(dǎo)圖來(lái)全面了解Spring AOP的知識(shí)點(diǎn)!

那么接下來(lái)就開(kāi)始吧,如果有錯(cuò)的地方希望能多多包涵,并不吝在評(píng)論區(qū)指正!

一、Spring AOP全面認(rèn)知

結(jié)合《Spring 實(shí)戰(zhàn) (第4版)》和《精通Spring4.x 企業(yè)應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)》兩本書(shū)的AOP章節(jié)將其知識(shí)點(diǎn)整理起來(lái)~

1.1AOP概述

AOP稱(chēng)為面向切面編程,那我們?cè)趺蠢斫饷嫦蚯忻婢幊???/p>

我們可以先看看下面這段代碼:

我們學(xué)Java面向?qū)ο蟮臅r(shí)候,如果代碼重復(fù)了怎么辦?。??可以分成下面幾個(gè)步驟:

1:抽取成方法

2:抽取類(lèi)

抽取成類(lèi)的方式我們稱(chēng)之為:縱向抽取

通過(guò)繼承的方式實(shí)現(xiàn)縱向抽取

但是,我們現(xiàn)在的辦法不行:即使抽取成類(lèi)還是會(huì)出現(xiàn)重復(fù)的代碼,因?yàn)檫@些邏輯(開(kāi)始、結(jié)束、提交事務(wù))依附在我們業(yè)務(wù)類(lèi)的方法邏輯中!

現(xiàn)在縱向抽取的方式不行了,AOP的理念:就是將分散在各個(gè)業(yè)務(wù)邏輯代碼中相同的代碼通過(guò)橫向切割的方式抽取到一個(gè)獨(dú)立的模塊中!

上面的圖也很清晰了,將重復(fù)性的邏輯代碼橫切出來(lái)其實(shí)很容易(我們簡(jiǎn)單可認(rèn)為就是封裝成一個(gè)類(lèi)就好了),但我們要將這些被我們橫切出來(lái)的邏輯代碼融合到業(yè)務(wù)邏輯中,來(lái)完成和之前(沒(méi)抽取前)一樣的功能!這就是AOP首要解決的問(wèn)題了!

1.2Spring AOP原理
被我們橫切出來(lái)的邏輯代碼融合到業(yè)務(wù)邏輯中,來(lái)完成和之前(沒(méi)抽取前)一樣的功能

沒(méi)有學(xué)Spring AOP之前,我們就可以使用代理來(lái)完成。

如果看過(guò)我寫(xiě)的給女朋友講解什么是代理模式這篇文章的話,一定就不難理解上面我說(shuō)的那句話了

代理能干嘛?代理可以幫我們增強(qiáng)對(duì)象的行為!使用動(dòng)態(tài)代理實(shí)質(zhì)上就是調(diào)用時(shí)攔截對(duì)象方法,對(duì)方法進(jìn)行改造、增強(qiáng)

其實(shí)Spring AOP的底層原理就是動(dòng)態(tài)代理!

來(lái)源《精通Spring4.x 企業(yè)應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)》一段話:

Spring AOP使用純Java實(shí)現(xiàn),它不需要專(zhuān)門(mén)的編譯過(guò)程,也不需要特殊的類(lèi)裝載器,它在運(yùn)行期通過(guò)代理方式向目標(biāo)類(lèi)織入增強(qiáng)代碼。在Spring中可以無(wú)縫地將Spring AOP、IoC和AspectJ整合在一起。

來(lái)源《Spring 實(shí)戰(zhàn) (第4版)》一句話:

Spring AOP構(gòu)建在動(dòng)態(tài)代理基礎(chǔ)之上,因此,Spring對(duì)AOP的支持局限于方法攔截。

在Java中動(dòng)態(tài)代理有兩種方式:

JDK動(dòng)態(tài)代理

CGLib動(dòng)態(tài)代理

JDK動(dòng)態(tài)代理是需要實(shí)現(xiàn)某個(gè)接口了,而我們類(lèi)未必全部會(huì)有接口,于是CGLib代理就有了~~

CGLib代理其生成的動(dòng)態(tài)代理對(duì)象是目標(biāo)類(lèi)的子類(lèi)

Spring AOP默認(rèn)是使用JDK動(dòng)態(tài)代理,如果代理的類(lèi)沒(méi)有接口則會(huì)使用CGLib代理

那么JDK代理和CGLib代理我們?cè)撚媚膫€(gè)呢??在《精通Spring4.x 企業(yè)應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)》給出了建議:

如果是單例的我們最好使用CGLib代理,如果是多例的我們最好使用JDK代理

原因:

JDK在創(chuàng)建代理對(duì)象時(shí)的性能要高于CGLib代理,而生成代理對(duì)象的運(yùn)行性能卻比CGLib的低。

如果是單例的代理,推薦使用CGLib

看到這里我們就應(yīng)該知道什么是Spring AOP(面向切面編程)了:將相同邏輯的重復(fù)代碼橫向抽取出來(lái),使用動(dòng)態(tài)代理技術(shù)將這些重復(fù)代碼織入到目標(biāo)對(duì)象方法中,實(shí)現(xiàn)和原來(lái)一樣的功能

這樣一來(lái),我們就在寫(xiě)業(yè)務(wù)時(shí)只關(guān)心業(yè)務(wù)代碼,而不用關(guān)心與業(yè)務(wù)無(wú)關(guān)的代碼

1.3AOP的實(shí)現(xiàn)者

AOP除了有Spring AOP實(shí)現(xiàn)外,還有著名的AOP實(shí)現(xiàn)者:AspectJ,也有可能大家沒(méi)聽(tīng)說(shuō)過(guò)的實(shí)現(xiàn)者:JBoss AOP~~

我們下面來(lái)說(shuō)說(shuō)AspectJ擴(kuò)展一下知識(shí)面:

AspectJ是語(yǔ)言級(jí)別的AOP實(shí)現(xiàn),擴(kuò)展了Java語(yǔ)言,定義了AOP語(yǔ)法,能夠在編譯期提供橫切代碼的織入,所以它有專(zhuān)門(mén)的編譯器用來(lái)生成遵守Java字節(jié)碼規(guī)范的Class文件。

而Spring借鑒了AspectJ很多非常有用的做法,融合了AspectJ實(shí)現(xiàn)AOP的功能。但Spring AOP本質(zhì)上底層還是動(dòng)態(tài)代理,所以Spring AOP是不需要有專(zhuān)門(mén)的編輯器的~

1.4AOP的術(shù)語(yǔ)

嗯,AOP搞了好幾個(gè)術(shù)語(yǔ)出來(lái)~~兩本書(shū)都有講解這些術(shù)語(yǔ),我會(huì)盡量讓大家看得明白的:

連接點(diǎn)(Join point):

能夠被攔截的地方:Spring AOP是基于動(dòng)態(tài)代理的,所以是方法攔截的。每個(gè)成員方法都可以稱(chēng)之為連接點(diǎn)~

切點(diǎn)(Poincut):

具體定位的連接點(diǎn):上面也說(shuō)了,每個(gè)方法都可以稱(chēng)之為連接點(diǎn),我們具體定位到某一個(gè)方法就成為切點(diǎn)。

增強(qiáng)/通知(Advice):

表示添加到切點(diǎn)的一段邏輯代碼,并定位連接點(diǎn)的方位信息。

簡(jiǎn)單來(lái)說(shuō)就定義了是干什么的,具體是在哪干

Spring AOP提供了5種Advice類(lèi)型給我們:前置、后置、返回、異常、環(huán)繞給我們使用!

織入(Weaving):

增強(qiáng)/通知添加到目標(biāo)類(lèi)的具體連接點(diǎn)上的過(guò)程。

引入/引介(Introduction):

引入/引介允許我們向現(xiàn)有的類(lèi)添加新方法或?qū)傩?/strong>。是一種特殊的增強(qiáng)!

切面(Aspect):

切面由切點(diǎn)和增強(qiáng)/通知組成,它既包括了橫切邏輯的定義、也包括了連接點(diǎn)的定義。

在《Spring 實(shí)戰(zhàn) (第4版)》給出的總結(jié)是這樣子的:

通知/增強(qiáng)包含了需要用于多個(gè)應(yīng)用對(duì)象的橫切行為;連接點(diǎn)是程序執(zhí)行過(guò)程中能夠應(yīng)用通知的所有點(diǎn);切點(diǎn)定義了通知/增強(qiáng)被應(yīng)用的具體位置。其中關(guān)鍵的是切點(diǎn)定義了哪些連接點(diǎn)會(huì)得到通知/增強(qiáng)。

總的來(lái)說(shuō):

這些術(shù)語(yǔ)可能翻譯過(guò)來(lái)不太好理解,但對(duì)我們正常使用AOP的話影響并沒(méi)有那么大~~看多了就知道它是什么意思了。

1.5Spring對(duì)AOP的支持

Spring提供了3種類(lèi)型的AOP支持:

基于代理的經(jīng)典SpringAOP

需要實(shí)現(xiàn)接口,手動(dòng)創(chuàng)建代理

純POJO切面

使用XML配置,aop命名空間

@AspectJ注解驅(qū)動(dòng)的切面

使用注解的方式,這是最簡(jiǎn)潔和最方便的!

二、基于代理的經(jīng)典SpringAOP

這部分配置比較麻煩,用起來(lái)也很麻煩,這里我就主要整理一下書(shū)上的內(nèi)容,大家看看了解一下吧,我們實(shí)際上使用Spring AOP基本不用這種方式了!

首先,我們來(lái)看一下增強(qiáng)接口的繼承關(guān)系圖:

可以分成五類(lèi)增強(qiáng)的方式:

Spring提供了六種的切點(diǎn)類(lèi)型

切面類(lèi)型主要分成了三種

一般切面

切點(diǎn)切面

引介/引入切面

一般切面,切點(diǎn)切面,引介/引入切面介紹:


對(duì)于切點(diǎn)切面我們一般都是直接用就好了,我們來(lái)看看引介/引入切面是怎么一回事:

引介/引入切面是引介/引入增強(qiáng)的封裝器,通過(guò)引介/引入切面,可以更容易地為現(xiàn)有對(duì)象添加任何接口的實(shí)現(xiàn)!

繼承關(guān)系圖:

引介/引入切面有兩個(gè)實(shí)現(xiàn)類(lèi):

DefaultIntroductionAdvisor:常用的實(shí)現(xiàn)類(lèi)

DeclareParentsAdvisor:用于實(shí)現(xiàn)AspectJ語(yǔ)言的DeclareParent注解表示的引介/引入切面

實(shí)際上,我們使用AOP往往是Spring內(nèi)部使用BeanPostProcessor幫我們創(chuàng)建代理。

這些代理的創(chuàng)建器可以分成三類(lèi):

基于Bean配置名規(guī)則的自動(dòng)代理創(chuàng)建器:BeanNameAutoProxyCreator

基于Advisor匹配機(jī)制的自動(dòng)代理創(chuàng)建器:它會(huì)對(duì)容器所有的Advisor進(jìn)行掃描,實(shí)現(xiàn)類(lèi)為DefaultAdvisorAutoProxyCreator

基于Bean中的AspectJ注解標(biāo)簽的自動(dòng)代理創(chuàng)建器:AnnotationAwareAspectJAutoProxyCreator

對(duì)應(yīng)的類(lèi)繼承圖:

嗯,基于代理的經(jīng)典SpringAOP就講到這里吧,其實(shí)我是不太愿意去寫(xiě)這個(gè)的,因?yàn)橐呀?jīng)幾乎不用了,在《Spring 實(shí)戰(zhàn) 第4版》也沒(méi)有這部分的知識(shí)點(diǎn)了。

但是通過(guò)這部分的知識(shí)點(diǎn)可以更加全面地認(rèn)識(shí)Spring AOP的各種接口吧~

三、擁抱基于注解和命名空的AOP編程

Spring在新版本中對(duì)AOP功能進(jìn)行了增強(qiáng),體現(xiàn)在這么幾個(gè)方面:

在XML配置文件中為AOP提供了aop命名空間

增加了AspectJ切點(diǎn)表達(dá)式語(yǔ)言的支持

可以無(wú)縫地集成AspectJ

那我們使用@AspectJ來(lái)玩AOP的話,學(xué)什么??其實(shí)也就是上面的內(nèi)容,學(xué)如何設(shè)置切點(diǎn)、創(chuàng)建切面、增強(qiáng)的內(nèi)容是什么...

具體的切點(diǎn)表達(dá)式使用還是前往:Spring【AOP模塊】就這么簡(jiǎn)單看吧~~

對(duì)應(yīng)的增強(qiáng)注解:

3.1使用引介/引入功能實(shí)現(xiàn)為Bean引入新方法

其實(shí)前置啊、后置啊這些很容易就理解了,整篇文章看下來(lái)就只有這個(gè)引介/引入切面有點(diǎn)搞頭。于是我們就來(lái)玩玩吧~

我們來(lái)看一下具體的用法吧,現(xiàn)在我有個(gè)服務(wù)員的接口:

public interface Waiter {

    // 向客人打招呼
    void greetTo(String clientName);

    // 服務(wù)
    void serveTo(String clientName);
}

一位年輕服務(wù)員實(shí)現(xiàn)類(lèi):

public class NaiveWaiter implements Waiter {
    public void greetTo(String clientName) {
        System.out.println("NaiveWaiter:greet to " + clientName + "...");
    }

    @NeedTest
    public void serveTo(String clientName) {
        System.out.println("NaiveWaiter:serving " + clientName + "...");
    }

}

現(xiàn)在我想做的就是:想這個(gè)服務(wù)員可以充當(dāng)售貨員的角色,可以賣(mài)東西!當(dāng)然了,我肯定不會(huì)加一個(gè)賣(mài)東西的方法到Waiter接口上啦,因?yàn)檫@個(gè)是暫時(shí)的~

所以,我搞了一個(gè)售貨員接口:

public interface Seller {

  // 賣(mài)東西
  int sell(String goods, String clientName);
}

一個(gè)售貨員實(shí)現(xiàn)類(lèi):

public class SmartSeller implements Seller {

    // 賣(mài)東西
    public int sell(String goods,String clientName) {
        System.out.println("SmartSeller: sell "+goods +" to "+clientName+"...");
        return 100;
    }
    
}

此時(shí),我們的類(lèi)圖是這樣子的:

現(xiàn)在我想干的就是:借助AOP的引入/引介切面,來(lái)讓我們的服務(wù)員也可以賣(mài)東西

我們的引入/引介切面具體是這樣干的:

@Aspect
public class EnableSellerAspect {
    
    @DeclareParents(value = "com.smart.NaiveWaiter",  // 指定服務(wù)員具體的實(shí)現(xiàn)
            defaultImpl = SmartSeller.class) // 售貨員具體的實(shí)現(xiàn)
    public Seller seller; // 要實(shí)現(xiàn)的目標(biāo)接口
    
}

寫(xiě)了這個(gè)切面類(lèi)會(huì)發(fā)生什么??

切面技術(shù)將SmartSeller融合到NaiveWaiter中,這樣NaiveWaiter就實(shí)現(xiàn)了Seller接口?。。?!

是不是很神奇??我也覺(jué)得很神奇啊,我們來(lái)測(cè)試一下:

我們的bean.xml文件很簡(jiǎn)單:



    
    
    

測(cè)試一下:

public class Test {
    public static void main(String[] args) {


        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("com/smart/aspectj/basic/beans.xml");
        Waiter waiter = (Waiter) ctx.getBean("waiter");

        // 調(diào)用服務(wù)員原有的方法
        waiter.greetTo("Java3y");
        waiter.serveTo("Java3y");

        // 通過(guò)引介/引入切面已經(jīng)將waiter服務(wù)員實(shí)現(xiàn)了Seller接口,所以可以強(qiáng)制轉(zhuǎn)換
        Seller seller = (Seller) waiter;
        seller.sell("水軍", "Java3y");

    }
}

具體的調(diào)用過(guò)程是這樣子的:

當(dāng)引入接口方法被調(diào)用時(shí),代理對(duì)象會(huì)把此調(diào)用委托給實(shí)現(xiàn)了新接口的某個(gè)其他對(duì)象。實(shí)際上,一個(gè)Bean的實(shí)現(xiàn)被拆分到多個(gè)類(lèi)中

3.2在XML中聲明切面

我們知道注解很方便,但是,要想使用注解的方式使用Spring AOP就必須要有源碼(因?yàn)槲覀円谇忻骖?lèi)上添加注解)。如果沒(méi)有源碼的話,我們就得使用XML來(lái)聲明切面了~

其實(shí)就跟注解差不多的功能:

我們就直接來(lái)個(gè)例子終結(jié)掉它吧:

首先我們來(lái)測(cè)試一下與傳統(tǒng)的SpringAOP結(jié)合的advisor是怎么用的:

實(shí)現(xiàn)類(lèi):

xml配置文件:

.......

一個(gè)一個(gè)來(lái)講解還是太花時(shí)間了,我就一次性用圖的方式來(lái)講啦:

最后還有一個(gè)切面類(lèi)型總結(jié)圖,看完就幾乎懂啦:

三、總結(jié)

看起來(lái)AOP有很多很多的知識(shí)點(diǎn),其實(shí)我們只要記住AOP的核心概念就行啦。

下面是我的簡(jiǎn)要總結(jié)AOP:

AOP的底層實(shí)際上是動(dòng)態(tài)代理,動(dòng)態(tài)代理分成了JDK動(dòng)態(tài)代理和CGLib動(dòng)態(tài)代理。如果被代理對(duì)象沒(méi)有接口,那么就使用的是CGLIB代理(也可以直接配置使用CBLib代理)

如果是單例的話,那我們最好使用CGLib代理,因?yàn)镃GLib代理對(duì)象運(yùn)行速度要比JDK的代理對(duì)象要快

AOP既然是基于動(dòng)態(tài)代理的,那么它只能對(duì)方法進(jìn)行攔截,它的層面上是方法級(jí)別的

無(wú)論經(jīng)典的方式、注解方式還是XML配置方式使用Spring AOP的原理都是一樣的,只不過(guò)形式變了而已。一般我們使用注解的方式使用AOP就好了。

注解的方式使用Spring AOP就了解幾個(gè)切點(diǎn)表達(dá)式,幾個(gè)增強(qiáng)/通知的注解就完事了,是不是賊簡(jiǎn)單...使用XML的方式和注解其實(shí)沒(méi)有很大的區(qū)別,很快就可以上手啦。

引介/引入切面也算是一個(gè)比較亮的地方,可以用代理的方式為某個(gè)對(duì)象實(shí)現(xiàn)接口,從而能夠使用借口下的方法。這種方式是非侵入式的~

要增強(qiáng)的方法還可以接收與被代理方法一樣的參數(shù)、綁定被代理方法的返回值這些功能...

最后,將我們上一次IOC的思維導(dǎo)圖補(bǔ)充AOP的知識(shí)點(diǎn)上去吧~~~

參考資料:

《Spring 實(shí)戰(zhàn)》

《精通Spring4.x 企業(yè)應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)》

如果文章有錯(cuò)的地方歡迎指正,大家互相交流。習(xí)慣在微信看技術(shù)文章,想要獲取更多的Java資源的同學(xué),可以關(guān)注微信公眾號(hào):Java3y。為了大家方便,剛新建了一下qq群:742919422,大家也可以去交流交流。謝謝支持了!希望能多介紹給其他有需要的朋友

文章的目錄導(dǎo)航

https://zhongfucheng.bitcron.com/post/shou-ji/wen-zhang-dao-hang

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/69500.html

相關(guān)文章

  • Spring【DAO模塊】就是這么簡(jiǎn)單

    摘要:連接對(duì)象執(zhí)行命令對(duì)象執(zhí)行關(guān)閉值得注意的是,對(duì)數(shù)據(jù)庫(kù)連接池是有很好的支持的。給我們提供了事務(wù)的管理器類(lèi),事務(wù)管理器類(lèi)又分為兩種,因?yàn)榈氖聞?wù)和的事務(wù)是不一樣的。 前言 上一篇Spring博文主要講解了如何使用Spring來(lái)實(shí)現(xiàn)AOP編程,本博文主要講解Spring的DAO模塊對(duì)JDBC的支持,以及Spring對(duì)事務(wù)的控制... 對(duì)于JDBC而言,我們肯定不會(huì)陌生,我們?cè)诔鯇W(xué)的時(shí)候肯定寫(xiě)過(guò)非...

    NSFish 評(píng)論0 收藏0
  • SpringBoot自動(dòng)配置原理

    摘要:開(kāi)啟自動(dòng)配置功能后文詳解這個(gè)注解,學(xué)過(guò)的同學(xué)應(yīng)該對(duì)它不會(huì)陌生,就是掃描注解,默認(rèn)是掃描當(dāng)前類(lèi)下的。簡(jiǎn)單來(lái)說(shuō),這個(gè)注解可以幫助我們自動(dòng)載入應(yīng)用程序所需要的所有默認(rèn)配置。簡(jiǎn)單理解這二者掃描的對(duì)象是不一樣的。 前言 只有光頭才能變強(qiáng)。 文本已收錄至我的GitHub倉(cāng)庫(kù),歡迎Star:https://github.com/ZhongFuCheng3y/3y 回顧前面Spring的文章(以學(xué)習(xí)...

    Rainie 評(píng)論0 收藏0
  • Spring IOC知識(shí)點(diǎn)一網(wǎng)打盡!

    摘要:使用的好處知乎的回答不用自己組裝,拿來(lái)就用。統(tǒng)一配置,便于修改。 前言 只有光頭才能變強(qiáng) 回顧前面: 給女朋友講解什么是代理模式 包裝模式就是這么簡(jiǎn)單啦 單例模式你會(huì)幾種寫(xiě)法? 工廠模式理解了沒(méi)有? 在刷Spring書(shū)籍的時(shí)候花了點(diǎn)時(shí)間去學(xué)習(xí)了單例模式和工廠模式,總的來(lái)說(shuō)還是非常值得的! 本來(lái)想的是刷完《Spring 實(shí)戰(zhàn) (第4版)》和《精通Spring4.x 企業(yè)應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)》...

    djfml 評(píng)論0 收藏0
  • 徹底征服 Spring AOP 之 實(shí)戰(zhàn)篇

    摘要:接上一小節(jié)徹底征服之理論篇實(shí)戰(zhàn)看了上面這么多的理論知識(shí)不知道大家有沒(méi)有覺(jué)得枯燥哈不過(guò)不要急俗話說(shuō)理論是實(shí)踐的基礎(chǔ)對(duì)有了基本的理論認(rèn)識(shí)后我們來(lái)看一下下面幾個(gè)具體的例子吧下面的幾個(gè)例子是我在工作中所遇見(jiàn)的比較常用的的使用場(chǎng)景我精簡(jiǎn)了很多有干擾我 接上一小節(jié)徹底征服 Spring AOP 之 理論篇 Spring AOP 實(shí)戰(zhàn) 看了上面這么多的理論知識(shí), 不知道大家有沒(méi)有覺(jué)得枯燥哈. 不過(guò)不...

    CNZPH 評(píng)論0 收藏0
  • Spring還可以這么學(xué)--AOP

    摘要:還可以這么學(xué)上一篇文章還可以這么學(xué)控制反轉(zhuǎn)依賴(lài)注入理解什么是,即面向切面編程,可以說(shuō)是,面向?qū)ο缶幊痰难a(bǔ)充和完善。 Spring還可以這么學(xué)--AOP 上一篇文章Spring還可以這么學(xué)--IoC(控制反轉(zhuǎn)) / DI(依賴(lài)注入)理解 1. 什么是AOP? AOP(Aspect Oriented Programming),即面向切面編程,可以說(shuō)是OOP(Object Oriented ...

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

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

0條評(píng)論

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