亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

spring AOP(二) 相關(guān)類或接口

baishancloud / 1682人閱讀

摘要:注意前一節(jié)我們的代理是對(duì)對(duì)象進(jìn)行了代理,而的可以基于方法進(jìn)行代理,因?yàn)轭惖膶傩院头椒ǘ加邢鄳?yīng)的類來(lái)描述或者對(duì)應(yīng)屬性由的表示,方法由來(lái)表示這里說(shuō)幾個(gè)的接口或類切入點(diǎn)用來(lái)說(shuō)明是對(duì)哪些類的哪些方法進(jìn)行橫切就是被代理的對(duì)象的一個(gè)集合說(shuō)明對(duì)哪些類進(jìn)行

注意: 前一節(jié)我們的代理是對(duì)對(duì)象進(jìn)行了代理,而springAOP 可以基于方法進(jìn)行代理,因?yàn)轭惖膶傩院头椒ǘ加邢鄳?yīng)的類來(lái)描述或者對(duì)應(yīng) 屬性由java的Field 表示,方法由Method 來(lái)表示

這里說(shuō)幾個(gè)spring AOP 的接口或類

1 切入點(diǎn)

org.springframework.aop.Pointcut用來(lái)說(shuō)明是對(duì)哪些類的哪些方法進(jìn)行橫切,就是被代理的對(duì)象的一個(gè)集合

public interface Pointcut{
    //說(shuō)明對(duì)哪些類進(jìn)行橫切
    ClassFilter getClassFilter();
    //用來(lái)說(shuō)明對(duì)哪些方法進(jìn)行橫切
    MethodMatcher getMethodMatcher();

    Pointcut TRUE = TruePointcut.INSTANCE;
}
2 連接點(diǎn)

org.springframework.aop.JoinPoint 當(dāng)程序運(yùn)行時(shí),對(duì)某一個(gè)具體的要被橫切的方法的描述,通過(guò)它可以獲取被橫切,也就是被代理的那個(gè)方法的運(yùn)行時(shí)的狀態(tài),例如,被代理的方法的參數(shù),所屬對(duì)象,所屬對(duì)象簽名,代理對(duì)象。

public interface JoinPoint {
    //...
    //獲取所屬對(duì)象    
    Object getTarget();

    //獲取被代理的方法的參數(shù)
    Object[] getArgs();

    //獲取連接點(diǎn)的簽名
    Signature getSignature();

    //描述位置,哪一行
    SourceLocation getSourceLocation();

    //...
}

3 通知

MethodBeforeAdvice,AfterReturningAdvice,ThrowsAdvice, Advice是對(duì)
附加方法(被代理的方法前后需要執(zhí)行的)的描述
3.1

public interface MethodBeforeAdvice extends BeforeAdvice {

    void before(Method method, Object[] args, Object target) throws Throwable;

}

方法說(shuō)明:before方法有三個(gè)參數(shù) 被增強(qiáng)的方法,參數(shù),被橫切的對(duì)象從理論上來(lái)說(shuō)在before的方法內(nèi)部可以執(zhí)行 method.invoke(target,args) 來(lái)執(zhí)行被增強(qiáng)的方法,但是我們一般不會(huì)這么做,我們會(huì)用這三個(gè)參數(shù)來(lái)動(dòng)態(tài)獲取一些信息,或其它功能,但不是去執(zhí)行被增強(qiáng)的方法,也就是說(shuō)BeforeAdvice沒(méi)有代理的職責(zé)。

接口說(shuō)明:BeforeAdvice繼承Advice,BeforeAdviceAdvice都是標(biāo)識(shí)接口 沒(méi)有方法,沒(méi)有屬性
參數(shù)說(shuō)明:method 具體的一個(gè)連接點(diǎn) args 連接點(diǎn)的參數(shù) target 連接點(diǎn)所屬的對(duì)象

3.2

public interface AfterReturningAdvice extends AfterAdvice {

    void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable;

}

這里同樣沒(méi)有代理的職責(zé)

接口說(shuō)明:AfterAdvice繼承Advice,都是標(biāo)識(shí)接口 沒(méi)有方法,沒(méi)有屬性
參數(shù)說(shuō)明:returnValue被代理的方法的返回值的描述 method 具體的一個(gè)連接點(diǎn) args 連接點(diǎn)的參數(shù) target 連接點(diǎn)所屬的對(duì)象
3.3

public interface ThrowsAdvice extends AfterAdvice {

}

public void afterThrowing(Exception ex)
public void afterThrowing(RemoteException)
public void afterThrowing(Method method, Object[] args, Object target, Exception ex)
public void afterThrowing(Method method, Object[] args, Object target, ServletException ex)

說(shuō)明:ThrowsAdvice沒(méi)有方法,沒(méi)有屬性,但是實(shí)現(xiàn)這個(gè)接口的類必須有 afterThrowing 方法

4 攔截器

MethodInterceptor方法攔截器, 繼承了Interceptor接口,Interceptor接口又繼承了Advice接口,InterceptorAdvice都是標(biāo)識(shí)接口沒(méi)有屬性和方法

public interface MethodInterceptor extends Interceptor {
    
    Object invoke(MethodInvocation invocation) throws Throwable;
}

這里的invoke方法有代理的責(zé)任,也就是說(shuō)在invoke方法內(nèi)部會(huì)調(diào)用代理的那個(gè)方法,也就是去執(zhí)行連接點(diǎn)
MethodInvocation繼承了Invocation接口,Invocation接口繼承了Joinpoint接口,注意這里是Joinpoint,是java語(yǔ)言的java.lang.reflect.AccessibleObject.PointcutJoinpoint接口內(nèi)部有 Object proceed() throws Throwable這樣一個(gè)方法,調(diào)用這個(gè)方法會(huì)執(zhí)行JoinPoint描述的那個(gè)被代理的方法。

5 配置器

AdvisorPointcutAdvice的配置器,將 某個(gè)具體的 Advice 注入到 Pointcut所指定的位置

public interface Advisor {

    Advice getAdvice();

    boolean isPerInstance();

}

public class DefaultPointcutAdvisor extends AbstractGenericPointcutAdvisor implements Serializable {
    private Pointcut pointcut = Pointcut.TRUE;

    //...
    public DefaultPointcutAdvisor(Pointcut pointcut, Advice advice) {
        this.pointcut = pointcut;
        setAdvice(advice);
    }
    //...
}

public abstract class AbstractGenericPointcutAdvisor extends AbstractPointcutAdvisor {

    private Advice advice;


    /**
     * Specify the advice that this advisor should apply.
     */
    public void setAdvice(Advice advice) {
        this.advice = advice;
    }

    @Override
    public Advice getAdvice() {
        return this.advice;
    }

}

從上面我們可以看到DefaultPointcutAdvisor需要持有一個(gè)Advice的對(duì)象一個(gè)Pointcut的對(duì)象我們?cè)谑褂玫臅r(shí)候只需要為它提供這兩個(gè)對(duì)象他就會(huì)去自己進(jìn)行配置

6 代理工廠

ProxyFactoryBean, 創(chuàng)建代理對(duì)指定的某個(gè)類的對(duì)象進(jìn)行代理,或者對(duì)符合規(guī)則的一堆類進(jìn)行代理使用時(shí)只需進(jìn)行配置。

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

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

相關(guān)文章

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

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

    isaced 評(píng)論0 收藏0
  • SpringAOP面向切面詳解(帶實(shí)例)

    摘要:了解的相關(guān)術(shù)語(yǔ)通知通知定義了切面是什么,以及何時(shí)使用。描述了切面要完成的工作和何時(shí)需要執(zhí)行這個(gè)工作。就是用來(lái)配置切面設(shè)置代理模式。 了解AOP的相關(guān)術(shù)語(yǔ) 1.通知(Advice): 通知定義了切面是什么,以及何時(shí)使用。描述了切面要完成的工作和何時(shí)需要執(zhí)行這個(gè)工作。 2.連接點(diǎn)(Joinpoint): 程序能夠應(yīng)用通知的一個(gè)時(shí)機(jī),這些時(shí)機(jī)就是連接點(diǎn),例如方法被調(diào)用時(shí)、異常被拋出時(shí)等等。 ...

    馬忠志 評(píng)論0 收藏0
  • Spring之旅第一站(不得不佩服老外...)

    摘要:表示少女與緊耦合在它的構(gòu)造函數(shù)中自行創(chuàng)建了。面向切面編程往往被定義為促使軟件系統(tǒng)實(shí)現(xiàn)關(guān)注點(diǎn)的分離一項(xiàng)技術(shù)系統(tǒng)由許多不同的組件組成,每個(gè)組件各負(fù)責(zé)一特定的功能。我們可以把切面想象為覆蓋在很多組件之上的一個(gè)外殼。 第1章 Spring之旅 說(shuō)明 1、本文抄寫(xiě)了《Spring 實(shí)戰(zhàn)》重點(diǎn)內(nèi)容,參考了GitHub上的代碼 2、每個(gè)人的學(xué)習(xí)方式不一樣,但目的是一樣的,活學(xué)活用。最近一直在聽(tīng)《我...

    thekingisalwaysluc 評(píng)論0 收藏0
  • Spring自定義注解不生效原因解析及解決方法

    摘要:自定義注解不生效原因解析及解決方法背景項(xiàng)目中,自己基于實(shí)現(xiàn)了一套緩存注解。但是最近出現(xiàn)一種情況緩存竟然沒(méi)有生效,大量請(qǐng)求被擊穿到層,導(dǎo)致壓力過(guò)大。至此,問(wèn)題得到解決。 自定義注解不生效原因解析及解決方法 背景: 項(xiàng)目中,自己基于spring AOP實(shí)現(xiàn)了一套java緩存注解。但是最近出現(xiàn)一種情況:緩存竟然沒(méi)有生效,大量請(qǐng)求被擊穿到db層,導(dǎo)致db壓力過(guò)大?,F(xiàn)在我們看一下具體代碼情形(代...

    xbynet 評(píng)論0 收藏0
  • Spring體系常用項(xiàng)目一覽

    摘要:的面向的異常遵從通用的異常層次結(jié)構(gòu)。比如以前常用的框架,現(xiàn)在常用的框架包含許多項(xiàng)目,下面挑一些最常用的出來(lái)總結(jié)一下。狀態(tài)是流程中事件發(fā)生的地點(diǎn),在流程中通過(guò)轉(zhuǎn)移的方式從一個(gè)狀態(tài)到另一個(gè)狀態(tài),流程的當(dāng)前狀況稱為流程數(shù)據(jù)。 如今做Java尤其是web幾乎是避免不了和Spring打交道了,但是Spring是這樣的大而全,新鮮名詞不斷產(chǎn)生,學(xué)起來(lái)給人一種凌亂的感覺(jué),我就在這里總結(jié)一下,理順頭緒...

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

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

0條評(píng)論

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