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

資訊專欄INFORMATION COLUMN

Hello Spring-AOP

Kahn / 2609人閱讀

摘要:簡介什么是面向切面編程,是對傳統(tǒng)的面向對象編程的補充。通知有五種通知,執(zhí)行前,執(zhí)行后,執(zhí)行成功后,執(zhí)行拋出異常后,環(huán)繞通知。連接點連接點是一個應用執(zhí)行過程中能夠插入一個切面的點。

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

1 AOP簡介

1.1 什么是AOP

AOP(Aspect Oriented Programming)面向切面編程,是對傳統(tǒng)的OOP(ObjectOriented Programming)面向對象編程的補充。

1.2 AOP的作用

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

1.3 AOP專業(yè)術語

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

通知(Advice): 有五種通知,執(zhí)行前,執(zhí)行后,執(zhí)行成功后,執(zhí)行拋出異常后,環(huán)繞通知。就是切面執(zhí)行的方法。
目標(Target): 被通知的對象,這里就是A,B,C三個方法。
連接點(Joinpoint):連接點是一個應用執(zhí)行過程中能夠插入一個切面的點。
切點(pointcut):每個類都擁有多個連接點,即連接點是程序類中客觀存在的事務。AOP 通過切點定位到特定的連接點
打個比方:一天,三位俠客(被通知的對象Target)來我府上做客,被大門(切面Aspect)攔住,門前有五個保安(負責通知的Advice),因為其中一位俠客會降龍十八掌(滿足被通知的一個條件Joinpoint),其中一位保安告知他:"你可以進去了"。另外兩個俠客因為武藝超群(滿足被通知的統(tǒng)一標準poincut)也都進去了。

實例講解:

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

基于XML的使用

//這個便是我們的切面,即許多類要執(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;
   }

}

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

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("----------最終通知----------");
        }
}

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

  
  
       
    
    
    
    
    
    
    
    
    
        
        
                  

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





  
 //此為測試類
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說明該類為切面
@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設置為通知類,即當使用到before方法時,便執(zhí)行execution方括號中的號碼
    @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("----------最終通知----------");
    }
}







        
        
        



//測試類


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);
        }
}

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

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

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68042.html

相關文章

  • Hello Spring-AOP

    摘要:簡介什么是面向切面編程,是對傳統(tǒng)的面向對象編程的補充。通知有五種通知,執(zhí)行前,執(zhí)行后,執(zhí)行成功后,執(zhí)行拋出異常后,環(huán)繞通知。連接點連接點是一個應用執(zhí)行過程中能夠插入一個切面的點。 OOP(Object Oriented Programming)面向對象編程解決了縱向上的層次分割,例如MVC模式將展示層、持久化層、邏輯處理層一一分開了,使得開發(fā)效率得到了較大提高,但是這只是縱向上的分割,...

    jaysun 評論0 收藏0
  • 【好好面試】學完Aop,連動態(tài)代理的原理都不懂?

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

    Keven 評論0 收藏0
  • 學Aop?看這篇文章就夠了!!!

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

    boredream 評論0 收藏0
  • SSM學習系列(三) Hello Spring MVC

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

    jsbintask 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<