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

基于<aop:aspect>與<aop:advisor>的區(qū)別

 更新時間:2021年11月24日 08:36:12   作者:愛上香鍋的麻辣  
這篇文章主要介紹了<aop:aspect>與<aop:advisor>的區(qū)別,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

在開發(fā)過程中,不少有Spring Aop的使用,在面向切面編程時,我們會使用< aop:aspect>;在進行事務(wù)管理時,我們會使用< aop:advisor>。那么,對于< aop:aspect>與< aop:advisor>的區(qū)別,具體是怎樣的呢?

至于兩者的區(qū)別,網(wǎng)上有很多資料,但是似乎都不能說清楚。

首先,我們需要明確兩者的概念。

  • < aop:aspect>:定義切面(切面包括通知和切點)
  • < aop:advisor>:定義通知器(通知器跟切面一樣,也包括通知和切點)

下面,我們列舉兩者的幾個區(qū)別。

1、實現(xiàn)方式不同

< aop:aspect>定義切面時,只需要定義一般的bean就行,而定義< aop:advisor>中引用的通知時,通知必須實現(xiàn)Advice接口。

下面我們舉例說明。

首先,我們定義一個接口Sleepable和這個接口的實現(xiàn)Human,代碼如下:

public interface Sleepable {
    public void sleep();
}
public class Human implements Sleepable {
    @Override
    public void sleep() {
        System.out.println("我要睡覺了!");
    }
}

下面是< aop:advisor>的實現(xiàn)方式:

//定義通知
public class SleepHelper implements MethodBeforeAdvice,AfterReturningAdvice{
    @Override
    public void before(Method arg0, Object[] arg1, Object arg2)
            throws Throwable {
        System.out.println("睡覺前要脫衣服!");
    }
    @Override
    public void afterReturning(Object arg0, Method arg1, Object[] arg2,
            Object arg3) throws Throwable {
        System.out.println("起床后要穿衣服!");
    }
}
//aop配置
<bean id="sleepHelper" class="com.ghs.aop.SleepHelper"></bean>
<aop:config>
    <aop:pointcut expression="execution(* *.sleep(..))" id="sleepPointcut"/>
    <aop:advisor advice-ref="sleepHelper" pointcut-ref="sleepPointcut"/>
</aop:config>
<bean id="human" class="com.ghs.aop.Human"/>

下面是< aop:aspect>的實現(xiàn)方式:

//定義切面
public class SleepHelperAspect{
    public void beforeSleep(){
        System.out.println("睡覺前要脫衣服!");
    }
    public void afterSleep(){
        System.out.println("起床后要穿衣服!");
    }
}
//aop配置
<bean id="sleepHelperAspect" class="com.ghs.aop.SleepHelperAspect"></bean>
<aop:config>
    <aop:pointcut expression="execution(* *.sleep(..))" id="sleepPointcut"/>
    <aop:aspect ref="sleepHelperAspect">
        <!--前置通知-->
        <aop:before method="beforeSleep" pointcut-ref="sleepPointcut"/>
        <!--后置通知-->
        <aop:after method="afterSleep" pointcut-ref="sleepPointcut"/>
    </aop:aspect>
</aop:config>
<bean id="human" class="com.ghs.aop.Human"/>

測試代碼如下:

public class TestAOP {
    public static void main(String[] args) {
        method1();
//      method2();
    }
    private static void method1() {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext1.xml");
        Sleepable sleeper = (Sleepable) context.getBean("human");
        sleeper.sleep();
    }
    private static void method2() {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext2.xml");
        Sleepable sleeper = (Sleepable) context.getBean("human");
        sleeper.sleep();
    }

//執(zhí)行結(jié)果

睡覺前要脫衣服!

我要睡覺了!

起床后要穿衣服!

}

2、使用場景不同

< aop:advisor>大多用于事務(wù)管理。

例如:

<!-- 會重復讀,不會臟讀事務(wù) -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="*" timeout="120" propagation="REQUIRED" rollback-for="Exception" />
    </tx:attributes>
</tx:advice>
<aop:config proxy-target-class="true">
    <aop:pointcut id="txPointCut" expression="..."/>
    <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut" />
</aop:config>

< aop:aspect>大多用于日志,緩存

其實,不管是< aop:advisor>還是< aop:aspect>最終的實現(xiàn)邏輯是一樣的。

小結(jié)

可以看出,< aop:advisor>和< aop:aspect>其實都是將通知和切面進行了封裝,原理基本上是一樣的,只是使用的方式不同而已。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java編寫簡易rabbitmq生產(chǎn)者與消費者的代碼

    Java編寫簡易rabbitmq生產(chǎn)者與消費者的代碼

    開發(fā)時經(jīng)常與其它系統(tǒng)用rabbitmq對接,當需要自測時,還是自己寫rabbitmq生產(chǎn)者、消費者自測方便些,下面給大家總結(jié)使用java編寫簡易rabbitmq的方法,感興趣的朋友一起看看吧
    2023-11-11
  • 解決IDEA報錯war?exploded?is?not?valid問題

    解決IDEA報錯war?exploded?is?not?valid問題

    在使用IntelliJ?IDEA時遇到'[projectname]warexploded'無效的問題,可以通過清除項目列表、重新導入項目和配置新的Tomcat來解決,確保在Tomcat配置中,將ApplicationContext修改為僅包含一個'/',這一方法或許能幫助遇到相似問題的開發(fā)者
    2024-09-09
  • Java基礎(chǔ)知識雜文

    Java基礎(chǔ)知識雜文

    這篇文章主要介紹了Java基礎(chǔ)知識雜文,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • Eclipse運行android項目報錯Unable to build: the file dx.jar was not loaded from the SDK folder的解決辦法

    Eclipse運行android項目報錯Unable to build: the file dx.jar was not

    今天小編就為大家分享一篇關(guān)于Eclipse運行android項目報錯Unable to build: the file dx.jar was not loaded from the SDK folder的解決辦法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Java加載與存儲指令之ldc與_fast_aldc指令

    Java加載與存儲指令之ldc與_fast_aldc指令

    ldc指令將int、float、或者一個類、方法類型或方法句柄的符號引用、還可能是String型常量值從常量池中推送至棧頂。這一篇介紹一個虛擬機規(guī)范中定義的一個字節(jié)碼指令ldc,另外還有一個虛擬機內(nèi)部使用的字節(jié)碼指令_fast_aldc。需要的盆友可參考下面文章的內(nèi)容
    2021-09-09
  • SpringBoot配置文件的優(yōu)先級順序、加載順序、bootstrap.yml與application.yml區(qū)別及說明

    SpringBoot配置文件的優(yōu)先級順序、加載順序、bootstrap.yml與application.yml區(qū)別及說明

    在SpringBoot中,配置文件的優(yōu)先級順序是:application-{profile}.yml或.properties > application.yml或.properties > bootstrap.yml或.properties,{profile}代表不同環(huán)境,如dev、test、prod,加載順序是先加載bootstrap文件
    2024-09-09
  • java 中InputStream,String,File之間的相互轉(zhuǎn)化對比

    java 中InputStream,String,File之間的相互轉(zhuǎn)化對比

    這篇文章主要介紹了java 中InputStream,String,File之間的相互轉(zhuǎn)化對比的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Mybatis-plus出現(xiàn)數(shù)據(jù)庫id很大或者為負數(shù)的解決

    Mybatis-plus出現(xiàn)數(shù)據(jù)庫id很大或者為負數(shù)的解決

    本文主要介紹了Mybatis-plus出現(xiàn)數(shù)據(jù)庫id很大或者為負數(shù)的解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • Java JUC中操作List安全類的集合案例

    Java JUC中操作List安全類的集合案例

    這篇文章主要介紹了JUC中操作List安全類的集合案例,本文羅列了不安全的集合和安全的集合進行對比,以及Java中提供的安全措施,需要的朋友可以參考下
    2021-07-07
  • Java數(shù)據(jù)結(jié)構(gòu)和算法之鏈表詳解

    Java數(shù)據(jù)結(jié)構(gòu)和算法之鏈表詳解

    鏈表是一種物理存儲單元上非連續(xù)、非順序的存儲結(jié)構(gòu),java代碼實現(xiàn)單鏈表,插入,刪除和遍歷等功能,這篇文章主要給大家介紹了關(guān)于Java數(shù)據(jù)結(jié)構(gòu)和算法之鏈表的相關(guān)資料,需要的朋友可以參考下
    2024-01-01

最新評論

克山县| 利津县| 诏安县| 昌都县| 陇西县| 沂源县| 鄯善县| 岳池县| 池州市| 兴安盟| 余庆县| 稷山县| 广水市| 新竹市| 将乐县| 兴海县| 阿拉善右旗| 枣阳市| 北安市| 齐河县| 祥云县| 都安| 饶河县| 孝昌县| 阿拉尔市| 德江县| 武威市| 民权县| 柘城县| 五指山市| 米脂县| 和硕县| 板桥市| 成安县| 文安县| 临漳县| 海淀区| 姜堰市| 静安区| 庆安县| 博爱县|