国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring第三講:SpringAOP面向切面編程

這篇具有很好參考價值的文章主要介紹了Spring第三講:SpringAOP面向切面編程。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

五、Spring AOP

5、1什么是AOP

AOP(Aspect Orient Programming),面向切面編程,AOP 是一種編程思想,是面向?qū)ο缶幊蹋∣OP)的一種補充。面向切面編程,實現(xiàn)在不修改源代碼的情況下給程序動態(tài)統(tǒng)一添加額外功能的一種技術。AOP可以攔截指定的方法并且對方法增強,而且無需侵入到業(yè)務代碼中,使業(yè)務與非業(yè)務處理邏輯分離,比如Spring的事務,通過事務的注解配置,Spring會自動在業(yè)務方法中開啟、提交業(yè)務,并且在業(yè)務處理失敗時,執(zhí)行相應的回滾策略。

5、2AOP作用

AOP 采取橫向抽取機制(動態(tài)代理),取代了傳統(tǒng)縱向繼承機制的重復性代碼,其應用主要體現(xiàn)在事務處理、日志管理、權限控制、異常處理等方面。主要作用是分離功能性需求和非功能性需求,使開發(fā)人員可以集中處理某一個關注點或者橫切邏輯,減少對業(yè)務代碼的侵入,增強代碼的可讀性和可維護性。簡單的說,AOP 的作用就是保證開發(fā)者在不修改源代碼的前提下,為系統(tǒng)中的業(yè)務組件添加某種通用功能。

5、3AOP核心信息

  • Aspect(切面):切面是一個類,被@Aspect注解標準或者使用XML配置文件的aop:aspect引用。切面是類,一般在這個類中包含了大量要“織入”目標對象的方法。這些方法會被通知、切點表達式注解,因此也被稱為通知方法。

  • Target object(目標對象):目標對象就是被切面盯上,要被“織入”切面方法的對象。實現(xiàn)的方式是Spring AOP利用代理技術(JDK或CGLib)新建一個與目標對象類型相關的新對象,這個新對象稱為代理對象(proxy object)。

  • Join point(連接點):就是目標對象被“織入”內(nèi)容的位置,Spring AOP中連接點只能是目標對象程序執(zhí)行的節(jié)點,也就是執(zhí)行方法或拋出異常。所以在Spring AOP中,不管是連接點還是"織入"的內(nèi)容都是方法,只不過連接點是目標對象的方法,織入的內(nèi)容是切面的方法。

  • Advice(通知):織入內(nèi)容在連接點執(zhí)行的動作。例如前置,后置,環(huán)繞等。如圖所示,一個Advice是前置在切入點的(方法執(zhí)行),另一個Advice是后置在切入點(方法執(zhí)行)的,而且那個位置恰好還是連接點拋出了異常。

  • Pointcut(切點):經(jīng)常與通知寫在一起,通過切入點標識符和切入點表達式,匹配可以“織入”的目標對象的連接點。

5、4AOP通知類型

Spring AOP 提供了下面五種通知類型:

  • Before(前置通知):連接點前面執(zhí)行,不能終止后續(xù)流程,除非拋異常

  • AfterReturning(后置通知):連接點正常返回時執(zhí)行,有異常不執(zhí)行

  • AfterThrowing(異常通知):連接點方法拋出異常時執(zhí)行

  • After(最終通知):連接點退出時執(zhí)行,無論是正常退出還是異常退出

  • Around(環(huán)繞通知):圍繞連接點前后執(zhí)行,也能捕獲處理異常

5、5Spring AOP實現(xiàn)

pom.xml引入資源

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-aop</artifactId>
  <version>5.3.24</version>
</dependency>
<dependency>
  <groupId>aopalliance</groupId>
  <artifactId>aopalliance</artifactId>
  <version>1.0</version>
</dependency>
<dependency>
  <groupId>org.aspectj</groupId>
  <artifactId>aspectjweaver</artifactId>
  <version>1.9.19</version>
</dependency>

實現(xiàn)切面類,進行AOP切面處理

public class MyAdvice implements MethodBeforeAdvice, AfterReturningAdvice, MethodInterceptor {

  //SpringAOP前置通知
  @Override
  public void before(Method method, Object[] args, Object target) throws Throwable {

  }

  //SpringAOP后置通知
  @Override
  public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {

  }

  //環(huán)繞通知
  @Override
  public Object invoke(MethodInvocation invocation) throws Throwable {
    //前置通知方法
    invocation.proceed();//方法執(zhí)行
    //后置通知方法
    return null;
  }
}

在spring配置文件applicationContext中加入配置

<aop:config>
  <aop:advisor advice-ref="myAdvice" pointcut="execution(* com.demo.service.*.*(..))"/>
</aop:config>

注解實現(xiàn)AOP切面類編程

@Aspect
@Component
public class MyAspect {

  //設置執(zhí)行切面的方法
  private final static String EXPRESSION =
    "execution(* com.demo.service.*.*(..))";

  //前置通知
  @Before(EXPRESSION)
  public void beforeAdvice(JoinPoint joinPoint){
    System.out.println("前置通知");
  }


  //后置通知:方法正常執(zhí)行后,有返回值,執(zhí)行該后置通知:如果該方法執(zhí)行出現(xiàn)異常,則不執(zhí)行該后置通知
  @AfterReturning(value = EXPRESSION,returning = "returnVal")
  public void afterReturningAdvice(JoinPoint joinPoint,Object returnVal){
    System.out.println("后置通知");
  }

  //后置通知
  @After(EXPRESSION)
  public void afterAdvice(JoinPoint joinPoint){
    System.out.println("后置通知");
  }

  //環(huán)繞通知
  @Around(EXPRESSION)
  public Object aroundAdvice(ProceedingJoinPoint joinPoint) throws Throwable {
    System.out.println("環(huán)繞通知的前置通知");
    Object returnVale = joinPoint.proceed();
    System.out.println("環(huán)繞通知的后置通知");
    return returnVale;
  }

  // 異常通知:方法出現(xiàn)異常時,執(zhí)行該通知
  @AfterThrowing(value = EXPRESSION,throwing = "ex")
  public void throwAdvice(JoinPoint joinPoint, Exception ex){
    System.out.println("異常通知開始");
    System.out.println("出現(xiàn)異常:" + ex.getMessage());
    System.out.println("異常通知結(jié)束");
  }

}

使用注解配置切面類的applicationContext.xml文章來源地址http://www.zghlxwxcb.cn/news/detail-525232.html

<context:component-scan base-package="com.demo"/>
<aop:aspectj-autoproxy/>

到了這里,關于Spring第三講:SpringAOP面向切面編程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Spring AOP:面向切面編程

    在軟件開發(fā)中,我們經(jīng)常會遇到一些橫切關注點(cross-cutting concerns),如日志記錄、事務管理和安全性等。這些關注點不屬于特定的模塊或類,而是橫跨整個應用程序。傳統(tǒng)的面向?qū)ο缶幊谭椒ㄍ鶗⑦@些關注點與核心業(yè)務邏輯混雜在一起,導致代碼的可讀性和可維護性下

    2024年02月09日
    瀏覽(22)
  • Spring面向切面編程(AOP)

    Spring面向切面編程(AOP)

    AOP(Aspect Oriented Programming),即面向切面編程,利用一種稱為\\\"橫切\(zhòng)\\"的技術,剖開封裝的對象內(nèi)部,并將那些影響了多個類的公共行為封裝到一個可重用模塊,并將其命名為\\\"Aspect\\\",即切面。所謂\\\"切面\\\",簡單說就是那些與業(yè)務無關,卻為業(yè)務模塊所共同調(diào)用的邏輯或責任封裝

    2024年02月07日
    瀏覽(31)
  • [SSM]Spring面向切面編程AOP

    [SSM]Spring面向切面編程AOP

    目錄 十五、面向切面編程AOP 15.1AOP介紹 15.2AOP的七大術語 15.3切點表達式 15.4使用Spring的AOP 15.4.1準備工作 15.4.2基于AspectJ的AOP注解式開發(fā) 15.4.3基于XML配置方式的AOP(了解) 15.5AOP的實際案例:事務處理 15.6AOP的實際案例:安全日志 IoC使軟件組件松耦合。AOP讓你能夠捕捉系統(tǒng)中經(jīng)

    2024年02月15日
    瀏覽(28)
  • Spring AOP(面向切面編程)和方法攔截

    Spring AOP(面向切面編程)和方法攔截 Spring是一款廣泛使用的Java開發(fā)框架,提供了豐富的功能和工具,用于簡化企業(yè)級應用程序的開發(fā)。其中一個重要的特性是面向切面編程(AOP)和方法攔截。本文將介紹Spring AOP和方法攔截的概念、工作原理以及在實際開發(fā)中的應用。 在軟

    2024年02月05日
    瀏覽(24)
  • 認識 spring AOP (面向切面編程) - springboot

    認識 spring AOP (面向切面編程) - springboot

    本篇介紹什么是spring AOP, AOP的優(yōu)點,使用場景,spring AOP的組成,簡單實現(xiàn)AOP 并 了解它的通知;如有錯誤,請在評論區(qū)指正,讓我們一起交流,共同進步! 本文開始 AOP: 面向切面編程,也就是面向某一類編程,對某一類事情進行統(tǒng)一處理; spring AOP: 是實現(xiàn)了AOP這種思想的一

    2024年02月14日
    瀏覽(29)
  • 切面的魔力:解密Spring AOP 面向切面編程

    切面的魔力:解密Spring AOP 面向切面編程

    目錄 一、AOP簡介 1.1 什么是AOP ? 1.2?什么是面向切面編程 ? 1.3?AOP 的特點 二、?AOP的基本概念解讀 2.1 AOP的基本概念 2.2 AOP 概念趣事解讀 三、代碼情景演示 3.1?編寫目標對象(超級英雄們正常的行動) 3.2 編寫通知類 3.2.1?前置通知 3.2.2 后置通知 3.2.3 異常通知 3.2.4 環(huán)繞通知

    2024年02月11日
    瀏覽(89)
  • spring6-AOP面向切面編程

    spring6-AOP面向切面編程

    1、場景模擬 搭建子模塊:spring6-aop 1.1、聲明接口 聲明計算器接口Calculator,包含加減乘除的抽象方法 1.2、創(chuàng)建實現(xiàn)類 1.3、創(chuàng)建帶日志功能的實現(xiàn)類 1.4、提出問題 ①現(xiàn)有代碼缺陷 針對帶日志功能的實現(xiàn)類,我們發(fā)現(xiàn)有如下缺陷: 對核心業(yè)務功能有干擾,導致程序員在開發(fā)核

    2024年02月08日
    瀏覽(32)
  • 【Spring AOP】結(jié)合日志面向切面編程 兩種寫法

    ??????? 這里需要提前了解什么是Spring的AOP(Aspect Oriented Programming)。是在OOP(面向?qū)ο螅┧枷氲囊环N拓展思想。 簡單來說就是將某個代碼塊嵌入到其它的代碼塊中 。筆者先前學Spring也有學什么IoC啊AOP啊,但實際上沒有用過、就那聽過學過沒啥用的。。沒會兒就忘記了。

    2024年02月13日
    瀏覽(28)
  • Spring AOP (面向切面編程)原理與代理模式—實例演示

    Spring AOP (面向切面編程)原理與代理模式—實例演示

    Spring 中文文檔 (springdoc.cn) Spring | Home 官網(wǎng) ????????Java是一個面向?qū)ο螅∣OP)的語言,但它有一些弊端。雖然使用OOP可以通過組合或繼承的方式來實現(xiàn)代碼的重用。但當我們需要為多個不具有繼承關系的對象(一般指的是兩個不同的類,它們之間沒有繼承自同一個父類或接

    2024年02月15日
    瀏覽(28)
  • Spring AOP使用指南: 強大的面向切面編程技術

    Spring AOP使用指南: 強大的面向切面編程技術

    ???? 博主貓頭虎(????)帶您 Go to New World??? ?? 博客首頁 ——????貓頭虎的博客?? ?? 《面試題大全專欄》 ?? 文章圖文并茂??生動形象??簡單易學!歡迎大家來踩踩~?? ?? 《IDEA開發(fā)秘籍專欄》 ?? 學會IDEA常用操作,工作效率翻倍~?? ?? 《100天精通Golang(基礎

    2024年02月09日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包