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

資訊專(zhuān)欄INFORMATION COLUMN

Hello Spring-AOP

jaysun / 1617人閱讀

摘要:簡(jiǎn)介什么是面向切面編程,是對(duì)傳統(tǒng)的面向?qū)ο缶幊痰难a(bǔ)充。通知有五種通知,執(zhí)行前,執(zhí)行后,執(zhí)行成功后,執(zhí)行拋出異常后,環(huán)繞通知。連接點(diǎn)連接點(diǎn)是一個(gè)應(yīng)用執(zhí)行過(guò)程中能夠插入一個(gè)切面的點(diǎn)。

OOP(Object Oriented Programming)面向?qū)ο缶幊探鉀Q了縱向上的層次分割,例如MVC模式將展示層、持久化層、邏輯處理層一一分開(kāi)了,使得開(kāi)發(fā)效率得到了較大提高,但是這只是縱向上的分割,如果從水平方向上來(lái)看,即如果一個(gè)項(xiàng)目中的很多類(lèi)都需要實(shí)現(xiàn)某一個(gè)方法(例如:在網(wǎng)購(gòu)平臺(tái)上,登錄,下單,付款都需要對(duì)身份進(jìn)行驗(yàn)證)如果要在這些類(lèi)一一將這些都要執(zhí)行的方法添加到其中這無(wú)疑將會(huì)增加代碼量,這會(huì)使得程序顯得很臃腫。基于以上的操作便誕生了我們今天的主角----Spring-AOP。AOP即(Aspect Oriented Programming)面向切面編程。Spring-AOP就是實(shí)現(xiàn)一閃剛提出的問(wèn)題。接下來(lái)我們就為大家揭開(kāi)Spring-AOP的“神秘面紗”。

1 AOP簡(jiǎn)介

1.1 什么是AOP

AOP(Aspect Oriented Programming)面向切面編程,是對(duì)傳統(tǒng)的OOP(ObjectOriented Programming)面向?qū)ο缶幊痰难a(bǔ)充。

1.2 AOP的作用

如果A,B,C三個(gè)方法都要在執(zhí)行前做驗(yàn)證操作,執(zhí)行后做日志打印操作。腫么辦?
![圖片描述][1]

1.3 AOP專(zhuān)業(yè)術(shù)語(yǔ)

   切面(Aspect): A,B,C,方法執(zhí)行前都要調(diào)用的驗(yàn)證邏輯和執(zhí)行后都要調(diào)用的日志邏輯,這兩個(gè)就是切面。

通知(Advice): 有五種通知,執(zhí)行前,執(zhí)行后,執(zhí)行成功后,執(zhí)行拋出異常后,環(huán)繞通知。就是切面執(zhí)行的方法。
目標(biāo)(Target): 被通知的對(duì)象,這里就是A,B,C三個(gè)方法。
連接點(diǎn)(Joinpoint):連接點(diǎn)是一個(gè)應(yīng)用執(zhí)行過(guò)程中能夠插入一個(gè)切面的點(diǎn)。
切點(diǎn)(pointcut):每個(gè)類(lèi)都擁有多個(gè)連接點(diǎn),即連接點(diǎn)是程序類(lèi)中客觀存在的事務(wù)。AOP 通過(guò)切點(diǎn)定位到特定的連接點(diǎn)
打個(gè)比方:一天,三位俠客(被通知的對(duì)象Target)來(lái)我府上做客,被大門(mén)(切面Aspect)攔住,門(mén)前有五個(gè)保安(負(fù)責(zé)通知的Advice),因?yàn)槠渲幸晃粋b客會(huì)降龍十八掌(滿足被通知的一個(gè)條件Joinpoint),其中一位保安告知他:"你可以進(jìn)去了"。另外兩個(gè)俠客因?yàn)槲渌嚦海M足被通知的統(tǒng)一標(biāo)準(zhǔn)poincut)也都進(jìn)去了。

實(shí)例講解:

下面我們以一段實(shí)例來(lái)講解基于XML配置文件和基于注解的方式來(lái)說(shuō)明Spring-AOP的運(yùn)行機(jī)制。
該程序的整體運(yùn)行機(jī)制是:將入一個(gè)項(xiàng)目都想執(zhí)行加、減、乘、除這四個(gè)方法,所以我們將這四個(gè)操作封裝在一個(gè)類(lèi)中并將其作為一個(gè)切面,從而提高代碼的復(fù)用率。

基于XML的使用

//這個(gè)便是我們的切面,即許多類(lèi)要執(zhí)行的方法
package com.zhangguo.Spring052.aop01;
public class Math {

     //加
   public int add(int n1,int n2){
       int result=n1+n2;
       System.out.println(n1+"+"+n2+"="+result);
       return result;
   }
   
   //減
   public int sub(int n1,int n2){
       int result=n1-n2;
       System.out.println(n1+"-"+n2+"="+result);
       return result;
   }
   
   //乘
   public int mut(int n1,int n2){
       int result=n1*n2;
       System.out.println(n1+"X"+n2+"="+result);
       return result;
   }
   
   //除
   public int div(int n1,int n2){
       int result=n1/n2;
       System.out.println(n1+"/"+n2+"="+result);
       return result;
   }

}

//這個(gè)就是通知啦,好比是上面所打比方的那五個(gè)門(mén)衛(wèi),所有類(lèi)要使用上面的切面首先要經(jīng)過(guò)這個(gè)類(lèi)的“審核”

package com.zhangguo.Spring052.aop01;
import org.aspectj.lang.JoinPoint; 
public class Advices {

     public void before(JoinPoint jp){
            System.out.println("----------前置通知----------");
            System.out.println(jp.getSignature().getName());
        }    
     public void after(JoinPoint jp){
            System.out.println("----------最終通知----------");
        }
}

//下面我們列出本實(shí)例的核心,XML配置文件

  
  
       
    
    
    
    
    
    
    
    
    
        
        
                  

                  
                  //當(dāng)實(shí)現(xiàn)了通知中的before方法時(shí)執(zhí)行切面中方法
                  
                  //當(dāng)實(shí)現(xiàn)了通知中的after方法時(shí)執(zhí)行切面中方法
                  
        
    





  
 //此為測(cè)試類(lèi)
package com.zhangguo.Spring052.aop01;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {
     
     public static void main(String[] args) {
         ApplicationContext ctx = new ClassPathXmlApplicationContext("aop01.xml");
            Math math = ctx.getBean("math", Math.class);
            int n1 = 100, n2 = 5;
            math.add(n1, n2);
            math.sub(n1, n2);
            math.mut(n1, n2);
            math.div(n1, n2);
    }
}





基于注解的使用

package com.zhangguo.Spring052.aop02;
import org.springframework.stereotype.Service; 

//此處使用@Service說(shuō)明該類(lèi)為切面
@Service("math")
public class Math{
    //加
    public int add(int n1,int n2){
        int result=n1+n2;
        System.out.println(n1+"+"+n2+"="+result);
        return result;
    }
    
    //減
    public int sub(int n1,int n2){
        int result=n1-n2;
        System.out.println(n1+"-"+n2+"="+result);
        return result;
    }
    
    //乘
    public int mut(int n1,int n2){
        int result=n1*n2;
        System.out.println(n1+"X"+n2+"="+result);
        return result;
    }
    
    //除
    public int div(int n1,int n2){
        int result=n1/n2;
        System.out.println(n1+"/"+n2+"="+result);
        return result;
    }
}



package com.zhangguo.Spring052.aop02;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Component
@Aspect
public class Advices {
//此注解可以將Advices設(shè)置為通知類(lèi),即當(dāng)使用到before方法時(shí),便執(zhí)行execution方括號(hào)中的號(hào)碼
    @Before("execution(* com.zhangguo.Spring052.aop02.Math.*(..))")
    public void before(JoinPoint jp){
        System.out.println("----------前置通知----------");
        System.out.println(jp.getSignature().getName());
    }
    
    @After("execution(* com.zhangguo.Spring052.aop02.Math.*(..))")
    public void after(JoinPoint jp){
        System.out.println("----------最終通知----------");
    }
}







        
        
        



//測(cè)試類(lèi)


package com.zhangguo.Spring052.aop02;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {
     public static void main(String[] args) {
            ApplicationContext ctx = new ClassPathXmlApplicationContext("aop02.xml");
            Math math = ctx.getBean("math", Math.class);
            int n1 = 100, n2 = 5;
            math.add(n1, n2);
            math.sub(n1, n2);
            math.mut(n1, n2);
            math.div(n1, n2);
        }
}

最后附上項(xiàng)目源碼地址:
鏈接:http://pan.baidu.com/s/1hrQIdvu 密碼:eknb

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/35879.html

相關(guān)文章

  • Hello Spring-AOP

    摘要:簡(jiǎn)介什么是面向切面編程,是對(duì)傳統(tǒng)的面向?qū)ο缶幊痰难a(bǔ)充。通知有五種通知,執(zhí)行前,執(zhí)行后,執(zhí)行成功后,執(zhí)行拋出異常后,環(huán)繞通知。連接點(diǎn)連接點(diǎn)是一個(gè)應(yīng)用執(zhí)行過(guò)程中能夠插入一個(gè)切面的點(diǎn)。 OOP(Object Oriented Programming)面向?qū)ο缶幊探鉀Q了縱向上的層次分割,例如MVC模式將展示層、持久化層、邏輯處理層一一分開(kāi)了,使得開(kāi)發(fā)效率得到了較大提高,但是這只是縱向上的分割,...

    Kahn 評(píng)論0 收藏0
  • 【好好面試】學(xué)完Aop,連動(dòng)態(tài)代理的原理都不懂?

    摘要:總結(jié)動(dòng)態(tài)代理的相關(guān)原理已經(jīng)講解完畢,接下來(lái)讓我們回答以下幾個(gè)思考題。 【干貨點(diǎn)】 此處是【好好面試】系列文的第12篇文章。文章目標(biāo)主要是通過(guò)原理剖析的方式解答Aop動(dòng)態(tài)代理的面試熱點(diǎn)問(wèn)題,通過(guò)一步步提出問(wèn)題和了解原理的方式,我們可以記得更深更牢,進(jìn)而解決被面試官卡住喉嚨的情況。問(wèn)題如下 SpringBoot默認(rèn)代理類(lèi)型是什么 為什么不用靜態(tài)代理 JDK動(dòng)態(tài)代理原理 CGLIB動(dòng)態(tài)代理...

    Keven 評(píng)論0 收藏0
  • 學(xué)Aop?看這篇文章就夠了!!!

    摘要:又是什么其實(shí)就是一種實(shí)現(xiàn)動(dòng)態(tài)代理的技術(shù),利用了開(kāi)源包,先將代理對(duì)象類(lèi)的文件加載進(jìn)來(lái),之后通過(guò)修改其字節(jié)碼并且生成子類(lèi)。 在實(shí)際研發(fā)中,Spring是我們經(jīng)常會(huì)使用的框架,畢竟它們太火了,也因此Spring相關(guān)的知識(shí)點(diǎn)也是面試必問(wèn)點(diǎn),今天我們就大話Aop。特地在周末推文,因?yàn)樵撈恼麻喿x起來(lái)還是比較輕松詼諧的,當(dāng)然了,更主要的是周末的我也在充電學(xué)習(xí),希望有追求的朋友們也盡量不要放過(guò)周末時(shí)...

    boredream 評(píng)論0 收藏0
  • SSM學(xué)習(xí)系列(三) Hello Spring MVC

    摘要:初步使用為了減少找?guī)斓穆闊捎梅绞綐?gòu)建首先在中創(chuàng)建工程構(gòu)建后,項(xiàng)目目錄如下修改,導(dǎo)入所需要的包初始化框架的版本號(hào)加入引入包含依賴新建所需要的配置文件,并新建一個(gè)控制器,最后項(xiàng)目目錄如下修 Spring MVC 初步使用 Hello Spring MVC 為了減少找?guī)斓穆闊捎胢aven方式構(gòu)建spring mvc 首先在IDEA中創(chuàng)建maven工程 showImg(https://...

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

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

0條評(píng)論

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