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

資訊專(zhuān)欄INFORMATION COLUMN

<spring 3.x企業(yè)應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)>讀書(shū)筆記-基于注解和聲明式的aop

馬龍駒 / 3119人閱讀

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

@AspectJ配置切面 編程方式實(shí)現(xiàn)
public class Waiter {
    public void check(String name){
        System.out.println("waiter說(shuō):結(jié)賬?"+name);
    }
    public void serve(String name){
        System.out.println("waiter說(shuō):要點(diǎn)什么?"+name);
    }
}
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

@Aspect
public class PreGreeting {
    @Before("execution(* serve(..))")
    public void beforeGreeting(){
        System.out.println("how are you!");
    }
}

@Before注解表示前置增強(qiáng),后面的切點(diǎn)表達(dá)式表示在目標(biāo)類(lèi)的serve()方法織入增強(qiáng),serve()方法可以帶任意的傳入?yún)?shù)和任意的返回值。
PreGreeting類(lèi)通過(guò)注解,將切點(diǎn),增強(qiáng)類(lèi)型和增強(qiáng)的橫切邏輯組合在一起。PreGreeting類(lèi)相當(dāng)于上一篇中的BeforeAdvice(增強(qiáng)),NameMatchMethodPointcut(切點(diǎn)),DefaultPointcutAdvisor(切面)三者聯(lián)合表達(dá)的信息。

        Waiter waiter=new Waiter();
        AspectJProxyFactory factory=new AspectJProxyFactory();
        factory.setTarget(waiter);//設(shè)置目標(biāo)類(lèi)
        factory.addAspect(PreGreeting.class);//添加切面
        Waiter proxy=factory.getProxy();
        proxy.serve("TheViper");
        proxy.check("TheViper");
how are you!
waiter說(shuō):要點(diǎn)什么?TheViper
waiter說(shuō):結(jié)賬?TheViper
通過(guò)配置使用

    
    
    

引用aop命名空間

xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="...  
    http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop.xsd"

自動(dòng)為spring容器中那些匹配@AspectJ切面的Bean創(chuàng)建代理,完成切面織入

        ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
        Waiter waiter=(Waiter)ctx.getBean("waiter");
        waiter.serve("TheViper");
        waiter.check("TheViper");

使用的時(shí)候,直接獲取bean操作就可以了,不用像前面還要?jiǎng)?chuàng)建AspectJProxyFactory,設(shè)置好代理才能用。

schema配置切面 配置命名切點(diǎn)

需要引入aspectjweaver

public class GreetBefore {
    public void say(String name){
        System.out.println("hallo!"+name);
    }
}

增強(qiáng)不用像上一篇中那樣,需要繼承特定類(lèi)或?qū)崿F(xiàn)特定接口。


    
    
    
        
        
            
        
    
  

匹配Waiter類(lèi)中的check()方法。

需要引入aop命名空間

xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="... http://www.springframework.org/schema/aop 
http://www.springframework.org/schema/aop/spring-aop.xsd"

定義切面,其內(nèi)部可以定義多個(gè)增強(qiáng),ref屬性指定引用的具體增強(qiáng)

聲明了一個(gè)前置增強(qiáng),通過(guò)pointcut-ref屬性引用切點(diǎn),method屬性指定增強(qiáng)中哪個(gè)方法用于具體的增強(qiáng)行為

定義切點(diǎn),expression屬性設(shè)置切點(diǎn)表達(dá)式,其語(yǔ)法和@AspectJ中的語(yǔ)法完全相同。

public class Waiter {
    public void check(String name){
        System.out.println("waiter說(shuō):結(jié)賬?"+name);
    }
    public void serve(String name){
        System.out.println("waiter說(shuō):要點(diǎn)什么?"+name);
    }
}
        ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
        Waiter waiter=(Waiter)ctx.getBean("waiterTarget");
        waiter.serve("TheViper");
        waiter.check("TheViper");
waiter說(shuō):要點(diǎn)什么?TheViper
hallo!TheViper
waiter說(shuō):結(jié)賬?TheViper
配置順序問(wèn)題

命名切點(diǎn)只能被當(dāng)前內(nèi)定義的元素訪問(wèn)到,中的配置順序必須是=>=>

各種增強(qiáng)類(lèi)型 后置增強(qiáng)

    ...
    
        
    
環(huán)繞增強(qiáng)

    ...
    
        
    
    public void aroundMethod(ProceedingJoinPoint pjp){
    //pjp可以訪問(wèn)到環(huán)繞增強(qiáng)的連接點(diǎn)信息
        ...
    }
拋出異常增強(qiáng)

    ...
    
        
    
public void afterThrowingMethod(Exception exception){
    ...
}

throwing屬性聲明需要綁定的異常對(duì)象,指定的異常名必須和增強(qiáng)方法對(duì)應(yīng)的傳入?yún)?shù)一致

final增強(qiáng)

    ...
    
        
    
引介增強(qiáng)

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

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

相關(guān)文章

  • &lt;spring 3.x企業(yè)應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)&gt;讀書(shū)筆記-aop基礎(chǔ)

    摘要:是什么是面向切面編程的簡(jiǎn)稱(chēng)。負(fù)責(zé)實(shí)施切面,它將切面所定義的橫切邏輯織入到切面所指定的連接點(diǎn)鐘。靜態(tài)正則表達(dá)式匹配切面是正則表達(dá)式方法匹配的切面實(shí)現(xiàn)類(lèi)。流程切面的流程切面由和實(shí)現(xiàn)。 aop是什么 aop是面向切面編程(aspect oriented programing)的簡(jiǎn)稱(chēng)。aop的出現(xiàn)并不是要完全替代oop,僅是作為oop的有益補(bǔ)充。aop的應(yīng)用場(chǎng)合是有限的,一般只適合于那些具有橫...

    isaced 評(píng)論0 收藏0
  • Spring編程式和聲明式事務(wù)實(shí)例講解

    摘要:基于和命名空間的聲明式事務(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支持兩...

    lushan 評(píng)論0 收藏0
  • Spring實(shí)戰(zhàn)讀書(shū)筆記——Spring簡(jiǎn)介

    摘要:如何降低開(kāi)發(fā)的復(fù)雜性最小侵入編程通過(guò)面向接口和依賴(lài)注入實(shí)現(xiàn)松耦合基于編程慣例和切面進(jìn)行聲明式編程通過(guò)模板減少樣板式代碼容器在應(yīng)用中,不再由對(duì)象自行創(chuàng)建或管理它們之間的依賴(lài)關(guān)系容器負(fù)責(zé)創(chuàng)建對(duì)象裝配對(duì)象配置它們并管理它們的整個(gè)生命周期。 歡迎大家關(guān)注我的微信公眾號(hào),一起探討Java相關(guān)技術(shù) showImg(https://segmentfault.com/img/bVboaBO?w=129...

    CKJOKER 評(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)開(kāi)發(fā)中必不可少的一部分。Spring 為事務(wù)管理提供了豐富的功能支持。Spring 事務(wù)管理分為編碼式和聲明式的兩種方式。編程式...

    tuomao 評(píng)論0 收藏0
  • MyBatis集成Spring

    摘要:各方面有各種常見(jiàn)的良好示例,包括日志記錄,聲明式事務(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

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

0條評(píng)論

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