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

資訊專欄INFORMATION COLUMN

SpringAOP面向切面詳解(帶實(shí)例)

馬忠志 / 2009人閱讀

摘要:了解的相關(guān)術(shù)語通知通知定義了切面是什么,以及何時(shí)使用。描述了切面要完成的工作和何時(shí)需要執(zhí)行這個(gè)工作。就是用來配置切面設(shè)置代理模式。

了解AOP的相關(guān)術(shù)語

1.通知(Advice):

通知定義了切面是什么,以及何時(shí)使用。描述了切面要完成的工作和何時(shí)需要執(zhí)行這個(gè)工作。

2.連接點(diǎn)(Joinpoint):

程序能夠應(yīng)用通知的一個(gè)“時(shí)機(jī)”,這些“時(shí)機(jī)”就是連接點(diǎn),例如方法被調(diào)用時(shí)、異常被拋出時(shí)等等。

3.切入點(diǎn)(Pointcut):

通知定義了切面要發(fā)生的“故事”和時(shí)間,那么切入點(diǎn)就定義了“故事”發(fā)生的地點(diǎn),例如某個(gè)類或方法的名稱,Spring中允許我們方便的用正則表達(dá)式來指定(切面在哪個(gè)方法的前或后做出的那個(gè)方法點(diǎn))

4.切面(Aspect):

通知和切入點(diǎn)共同組成了切面:時(shí)間、地點(diǎn)和要發(fā)生的“故事”,事務(wù)管理是J2EE應(yīng)用中一個(gè)很好的橫切關(guān)注點(diǎn)例子,切面用Spring的Advisor或攔截器實(shí)現(xiàn)

5.引入(Introduction):

引入允許我們向現(xiàn)有的類添加新的方法和屬性(Spring提供了一個(gè)方法注入的功能)

6.目標(biāo)(Target):

即被通知的對(duì)象,如果沒有AOP,那么它的邏輯將要交叉別的事務(wù)邏輯,有了AOP之后它可以只關(guān)注自己要做的事(AOP讓他做愛做的事)

7.代理(proxy):

應(yīng)用通知的對(duì)象,詳細(xì)內(nèi)容參見設(shè)計(jì)模式里面的代理模式

8.織入(Weaving):

把切面應(yīng)用到目標(biāo)對(duì)象來創(chuàng)建新的代理對(duì)象的過程,織入一般發(fā)生在如下幾個(gè)時(shí)機(jī):

(1)編譯時(shí):當(dāng)一個(gè)類文件被編譯時(shí)進(jìn)行織入,這需要特殊的編譯器才可以做的到,例如AspectJ的織入編譯器

(2)類加載時(shí):使用特殊的ClassLoader在目標(biāo)類被加載到程序之前增強(qiáng)類的字節(jié)代碼

(3)運(yùn)行時(shí):切面在運(yùn)行的某個(gè)時(shí)刻被織入,SpringAOP就是以這種方式織入切面的,原理應(yīng)該是使用了JDK的動(dòng)態(tài)代理技術(shù)

存在的實(shí)現(xiàn)方式

1.經(jīng)典的基于代理的AOP
2.@AspectJ注解驅(qū)動(dòng)的切面
3.純POJO切面
4.注入式AspectJ切面

實(shí)現(xiàn)步驟

1.創(chuàng)建通知:實(shí)現(xiàn)這幾個(gè)接口,把其中的方法實(shí)現(xiàn)了
2.定義切點(diǎn)和通知者:在Spring配制文件中配置這些信息
3.使用ProxyFactoryBean來生成代理

范例

例子我是基于maven和Spring注解的方式,用POJO實(shí)現(xiàn)

工程的主要文件的配置

pom.xml


    4.0.0
    imooc
    springmaven
    war
    0.0.1-SNAPSHOT
    springmaven Maven Webapp
    http://maven.apache.org
    
        SSHMJ-FRANK
    
    
        
            mav
            sss
            http://mvnrepository.com
            
                true
            
            
                false
            
            default
        
    
    
        
            org.springframework
            spring-aop
            3.1.1.RELEASE
        
        
            org.springframework
            spring-asm
            3.1.1.RELEASE
        
        
            org.springframework
            spring-aspects
            3.1.1.RELEASE
        
        
            org.springframework
            spring-beans
            3.1.1.RELEASE
        
        
            org.springframework
            spring-context
            3.1.1.RELEASE
        
        
            org.springframework
            spring-context-support
            3.1.1.RELEASE
        
        
            org.springframework
            spring-core
            3.1.1.RELEASE
        
        
            org.springframework
            spring-expression
            3.1.1.RELEASE
        
        
            org.springframework
            spring-instrument
            3.1.1.RELEASE
        
        
            org.springframework
            spring-instrument-tomcat
            3.1.1.RELEASE
        
        
            org.aspectj
            aspectjweaver
            1.6.9
        
        
            commons-pool
            commons-pool
            1.5.3
        
        
            commons-collections
            commons-collections
            3.2
        
        
            log4j
            log4j
            1.2.16
        
        
            org.springframework
            spring-jms
            3.1.1.RELEASE
        
        
            org.springframework
            spring-oxm
            3.1.1.RELEASE
        
        
            org.springframework
            spring-web
            3.1.1.RELEASE
        
        
            org.springframework
            spring-webmvc
            3.1.1.RELEASE
        
        
            org.springframework
            spring-webmvc-portlet
            3.1.1.RELEASE
        
        
            org.springframework
            spring-struts
            3.1.1.RELEASE
        
        
            commons-httpclient
            commons-httpclient
            3.1
        

        
            ognl
            ognl
            2.6.9
        
        
            javax.servlet
            javax.servlet-api
            3.0.1
        
        
            javax.servlet
            jstl
            1.2
        
        
            cglib
            cglib
            2.2
        
    


    
        
            
                
                    org.apache.maven.plugins
                    maven-site-plugin
                    3.4
                
            
        
        springmaven
    

`web.xml`




  springmaven
  
    org.springframework.web.context.ContextLoaderListener
  
  
  
    contextConfigLocation
    classpath:applicationContext.xml
  

  
      spring
      org.springframework.web.servlet.DispatcherServlet
      
          contextConfigLocation
          classpath:spring-servlet.xml
      
      2
  
  
      spring
      *.html
  

applicationContext.xml




    
    
    
        
            
            
        
    

spring-servlet.xml


                   
 
        
    
 
    
    
     
        

        

        
    

IToDo.java

切入點(diǎn)(Pointcut)接口

package com.service.imp;

public interface IToDo {

    public String toEat();
}

ToDo.java

package com.service;

import org.springframework.stereotype.Service;

import com.service.imp.IToDo;
@Service
public class ToDo implements IToDo {

    @Override
    public String toEat() {
        System.out.println("吃蘋果");
        return "吃蘋果";
    }

}

IPreDo.java

package com.service.imp;

public interface IPreDo {

    public String toPre();
}

application.java

用于測(cè)試

package springmaven;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.service.imp.IToDo;

public class application {
    public static void main(String[] args) {
    ApplicationContext appCtx = new ClassPathXmlApplicationContext("applicationContext.xml");
     IToDo tdo = (IToDo)appCtx.getBean("toDo");
     tdo.toEat();
    }
}

工程圖片

返回的結(jié)果

洗手
吃蘋果
主要的配置講解
    
    
        
            
            
        
    

:會(huì)自動(dòng)為spring容器中那些配置@aspectJ切面的bean創(chuàng)建代理,織入切面,我這里沒有使用注解的方式,使用了xml配置的方式。

:就是用來配置aspectJ切面

proxy-target-class:設(shè)置代理模式。當(dāng)poxy-target-class="true"時(shí),表示使用CGLib動(dòng)態(tài)代理技術(shù)織入增強(qiáng)。設(shè)置為false時(shí),表示使用jdk動(dòng)態(tài)代理織入增強(qiáng),如果目標(biāo)類沒有聲明接口,則spring將自動(dòng)使用CGLib動(dòng)態(tài)代理。

:設(shè)置切面,ref是切面Bean的id名

:這里設(shè)置切入點(diǎn),expression設(shè)置切面植入的切入點(diǎn)的方法地址

:在執(zhí)行切入點(diǎn)方法之前執(zhí)行切面方法,method為切面中的執(zhí)行方法,pointcut-ref與切點(diǎn)的id一致就可以了

定義一個(gè)AOP通知者
后通知
返回后通知
拋出后通知
周圍通知
定義一個(gè)切面
前通知
頂級(jí)配置元素,類似于這種東西
定義一個(gè)切點(diǎn)

講解

    
    
        
            
            
        
    

returning:是切點(diǎn)的返回值,在切面中通過returnValue接受,若要獲取傳給切點(diǎn)的參數(shù)在切面的java方法參數(shù)中加上JoinPoint,獲取的是一個(gè)數(shù)組,按順序排列。

package com.service;

import org.aspectj.lang.JoinPoint;
import org.springframework.stereotype.Service;

import com.service.imp.IPreDo;
@Service
public class PreDo implements IPreDo {

    @Override
    public String toPre(JoinPoint joinPoint,Object returnValue) {
        System.out.println("洗手");
        System.out.println(joinPoint.getArgs()[0]);
        return "洗手";
    }

}

結(jié)果

吃蘋果
洗手
121212
參考資料:

Spring實(shí)現(xiàn)AOP的4種方式

proxy-target-class

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

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

相關(guān)文章

  • 從動(dòng)態(tài)代理到SpringAop以及AspectJ風(fēng)格

    摘要:具體的動(dòng)態(tài)代理運(yùn)行原理這里暫不展開,網(wǎng)上有很多相關(guān)的內(nèi)容,比如這篇翻譯過來就是面向方面切面編程。所以切面可以理解為和的集合。 1.靜態(tài)代理 在提及動(dòng)態(tài)代理前先說明一下靜態(tài)代理模式,靜態(tài)代理模式是一種很常見的通用設(shè)計(jì)模式,實(shí)現(xiàn)也很簡(jiǎn)單,uml類圖如下: showImg(https://segmentfault.com/img/bVba3gn?w=737&h=312); 如上圖所示,代理類...

    msup 評(píng)論0 收藏0
  • 慕課網(wǎng)_《探秘Spring AOP》學(xué)習(xí)總結(jié)

    時(shí)間:2017年09月03日星期日說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com 教學(xué)源碼:https://github.com/zccodere/s...學(xué)習(xí)源碼:https://github.com/zccodere/s... 第一章:課程介紹 1-1 面向切面 課程章節(jié) 概覽 AOP使用 AOP原理 AOP開源運(yùn)用 課程實(shí)戰(zhàn) 課程總結(jié) 面向切面編程是一種...

    Tony_Zby 評(píng)論0 收藏0
  • 慕課網(wǎng)_《Spring入門篇》學(xué)習(xí)總結(jié)

    摘要:入門篇學(xué)習(xí)總結(jié)時(shí)間年月日星期三說明本文部分內(nèi)容均來自慕課網(wǎng)。主要的功能是日志記錄,性能統(tǒng)計(jì),安全控制,事務(wù)處理,異常處理等等。 《Spring入門篇》學(xué)習(xí)總結(jié) 時(shí)間:2017年1月18日星期三說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)示例源碼:https://github.com/zccodere/s...個(gè)人學(xué)習(xí)源碼:https://git...

    Ververica 評(píng)論0 收藏0
  • Spring AOP就是這么簡(jiǎn)單啦

    摘要:是一種特殊的增強(qiáng)切面切面由切點(diǎn)和增強(qiáng)通知組成,它既包括了橫切邏輯的定義也包括了連接點(diǎn)的定義。實(shí)際上,一個(gè)的實(shí)現(xiàn)被拆分到多個(gè)類中在中聲明切面我們知道注解很方便,但是,要想使用注解的方式使用就必須要有源碼因?yàn)槲覀円? 前言 只有光頭才能變強(qiáng) 上一篇已經(jīng)講解了Spring IOC知識(shí)點(diǎn)一網(wǎng)打盡!,這篇主要是講解Spring的AOP模塊~ 之前我已經(jīng)寫過一篇關(guān)于AOP的文章了,那篇把比較重要的知...

    Jacendfeng 評(píng)論0 收藏0
  • 應(yīng)用SpringAOP及Tlog工具完成日志鏈路追蹤、收集、持久化

    摘要:經(jīng)過一番考察吧,對(duì)于鏈路追蹤,我們選用了這個(gè)日志追蹤工具。日志收集使用注解主要對(duì)出入?yún)⒓爱惓P判倪M(jìn)行收集處理。另外對(duì)進(jìn)行簡(jiǎn)單封裝,提供等方法,這些方法輸入的日志也進(jìn)行收集存儲(chǔ)。?一、痛點(diǎn)目前我司各系統(tǒng)的日志管理比較原始,使用logback打日志到log文件,雖然有服務(wù)管理平臺(tái),但記錄的日志也僅僅是前置機(jī)調(diào)用后臺(tái)系統(tǒng)的出入?yún)ⅲ?dāng)遇到問題時(shí)查日志較為麻煩。登錄VPN-打開服務(wù)器-找到日志目錄-打...

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

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

0條評(píng)論

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