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

資訊專欄INFORMATION COLUMN

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

馬忠志 / 2013人閱讀

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

了解AOP的相關術語

1.通知(Advice):

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

2.連接點(Joinpoint):

程序能夠應用通知的一個“時機”,這些“時機”就是連接點,例如方法被調用時、異常被拋出時等等。

3.切入點(Pointcut):

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

4.切面(Aspect):

通知和切入點共同組成了切面:時間、地點和要發生的“故事”,事務管理是J2EE應用中一個很好的橫切關注點例子,切面用Spring的Advisor或攔截器實現

5.引入(Introduction):

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

6.目標(Target):

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

7.代理(proxy):

應用通知的對象,詳細內容參見設計模式里面的代理模式

8.織入(Weaving):

把切面應用到目標對象來創建新的代理對象的過程,織入一般發生在如下幾個時機:

(1)編譯時:當一個類文件被編譯時進行織入,這需要特殊的編譯器才可以做的到,例如AspectJ的織入編譯器

(2)類加載時:使用特殊的ClassLoader在目標類被加載到程序之前增強類的字節代碼

(3)運行時:切面在運行的某個時刻被織入,SpringAOP就是以這種方式織入切面的,原理應該是使用了JDK的動態代理技術

存在的實現方式

1.經典的基于代理的AOP
2.@AspectJ注解驅動的切面
3.純POJO切面
4.注入式AspectJ切面

實現步驟

1.創建通知:實現這幾個接口,把其中的方法實現了
2.定義切點和通知者:在Spring配制文件中配置這些信息
3.使用ProxyFactoryBean來生成代理

范例

例子我是基于maven和Spring注解的方式,用POJO實現

工程的主要文件的配置

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

切入點(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

用于測試

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

工程圖片

返回的結果

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

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

:就是用來配置aspectJ切面

proxy-target-class:設置代理模式。當poxy-target-class="true"時,表示使用CGLib動態代理技術織入增強。設置為false時,表示使用jdk動態代理織入增強,如果目標類沒有聲明接口,則spring將自動使用CGLib動態代理。

:設置切面,ref是切面Bean的id名

:這里設置切入點,expression設置切面植入的切入點的方法地址

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

定義一個AOP通知者
后通知
返回后通知
拋出后通知
周圍通知
定義一個切面
前通知
頂級配置元素,類似于這種東西
定義一個切點

講解

    
    
        
            
            
        
    

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

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 "洗手";
    }

}

結果

吃蘋果
洗手
121212
參考資料:

Spring實現AOP的4種方式

proxy-target-class

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

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

相關文章

  • 從動態代理到SpringAop以及AspectJ風格

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

    msup 評論0 收藏0
  • 慕課網_《探秘Spring AOP》學習總結

    時間:2017年09月03日星期日說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com 教學源碼:https://github.com/zccodere/s...學習源碼:https://github.com/zccodere/s... 第一章:課程介紹 1-1 面向切面 課程章節 概覽 AOP使用 AOP原理 AOP開源運用 課程實戰 課程總結 面向切面編程是一種...

    Tony_Zby 評論0 收藏0
  • 慕課網_《Spring入門篇》學習總結

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

    Ververica 評論0 收藏0
  • Spring AOP就是這么簡單啦

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

    Jacendfeng 評論0 收藏0
  • 應用SpringAOP及Tlog工具完成日志鏈路追蹤、收集、持久化

    摘要:經過一番考察吧,對于鏈路追蹤,我們選用了這個日志追蹤工具。日志收集使用注解主要對出入參及異常信心進行收集處理。另外對進行簡單封裝,提供等方法,這些方法輸入的日志也進行收集存儲。?一、痛點目前我司各系統的日志管理比較原始,使用logback打日志到log文件,雖然有服務管理平臺,但記錄的日志也僅僅是前置機調用后臺系統的出入參,當遇到問題時查日志較為麻煩。登錄VPN-打開服務器-找到日志目錄-打...

    KaltZK 評論0 收藏0

發表評論

0條評論

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