最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring中的AOP面向切面編程詳解

 更新時間:2024年01月13日 08:37:33   作者:尼古丁?真  
這篇文章主要介紹了Spring中的AOP面向切面編程詳解,AOP?即面向切面編程,和?OOP面向?qū)ο缶幊填愃?也是一種編程思想,AOP采取橫向抽取機制(動態(tài)代理),取代了傳統(tǒng)縱向繼承機制的重復性代碼,其應用主要體現(xiàn)在事務處理、日志管理、權(quán)限控制等方面,需要的朋友可以參考下

一、什么是AOP

AOP 即面向切面編程,和 OOP(面向?qū)ο缶幊蹋╊愃疲彩且环N編程思想。

二、AOP的作用

AOP 采取橫向抽取機制(動態(tài)代理),取代了傳統(tǒng)縱向繼承機制的重復性代碼,其應用主要體現(xiàn)在事務處理、日志管理、權(quán)限控制、異常處理等方面。

主要作用是分離功能性需求和非功能性需求,使開發(fā)人員可以集中處理某一個關(guān)注點或者橫切邏輯,減少對業(yè)務代碼的侵入,增強代碼的可讀性和可維護性。

簡單的說,AOP 的作用就是保證開發(fā)者在不修改源代碼的前提下,為系統(tǒng)中的業(yè)務組件添加某種通用功能。AOP 就是代理模式的典型應用。

三、AOP中的術(shù)語

  1. 切面(Aspect):被抽取的公共模塊,可能會橫切多個對象。 在Spring AOP中,切面可以使用通用類(基于模式的風格) 或者在普通類中以 @AspectJ 注解來實現(xiàn)。
  2. 連接點(Join point):指方法,在Spring AOP中,一個連接點 總是 代表一個方法的執(zhí)行。
  3. 通知(Advice):在切面的某個特定的連接點(Join point)上執(zhí)行的動作。通知有各種類型,其中包括“around”、“before”和“after”等通知。許多AOP框架,包括Spring,都是以攔截器做通知模型, 并維護一個以連接點為中心的攔截器鏈。
  4. 切入點(Pointcut):切入點是指 我們要對哪些Join point進行攔截的定義。通過切入點表達式,指定攔截的方法,比如指定攔截add、search。
  5. 代理(Proxy):代理類 。
  6. 目標(Target): 被一個或者多個切面(aspect)所通知(advise)的對象。也有人把它叫做 被通知(adviced) 對象。 既然Spring AOP是通過運行時代理實現(xiàn)的,這個對象永遠是一個 被代理(proxied) 對象。
  7. 織入(Weaving):指把增強應用到目標對象來創(chuàng)建新的代理對象的過程。Spring是在運行時完成織入。
名稱說明
Aspect(切面)切入點和通知的結(jié)合。
Joinpoint(連接點)指那些被攔截到的點,在 Spring 中,指可以被動態(tài)代理攔截目標類的方法。
Advice(通知)指攔截到 Joinpoint 之后要做的事情,即對切入點增強的內(nèi)容。
Pointcut(切入點)指要對哪些 Joinpoint 進行攔截,即被攔截的連接點。
Proxy(代理)指生成的代理對象。
Target(目標)指代理的目標對象。
Weaving(植入)指把增強代碼應用到目標上,生成代理對象的過程。

四、AOP中的通知類型

  • 前置通知(Before): 在目標方法被調(diào)用前調(diào)用通知功能;
  • 后置通知(After): 在目標方法被調(diào)用之后調(diào)用通知功能;
  • 返回通知(After-returning): 在目標方法成功執(zhí)行之后調(diào)用通知功能;
  • 異常通知(After-throwing): 在目標方法拋出異常之后調(diào)用通知功能;
  • 環(huán)繞通知(Around): 把整個目標方法包裹起來,在被調(diào)用前和調(diào)用之后分別調(diào)用通知功能。
通知說明
前置通知(Before)通知方法在目標方法調(diào)用之前執(zhí)行
后置通知(After)通知方法在目標方法返回或異常后調(diào)用
返回通知(After-returning)通知方法會在目標方法返回后調(diào)用
異常通知(After-throwing)通知方法會在目標方法拋出異常后調(diào)用
環(huán)繞通知(Around)通知方法會將目標方法封裝起來

執(zhí)行順序:

 ①沒有異常情況下的執(zhí)行順序:

  1. around before advicez
  2.  before advice
  3.  target method 執(zhí)行
  4.  around after advice
  5.  after advice
  6.  afterReturning

②有異常情況下的執(zhí)行順序:

  1. around before advice
  2. before advice
  3. target method 執(zhí)行
  4. around after advice
  5. after advice
  6. afterThrowing:異常發(fā)生

五、開發(fā)流程

1、導入依賴

<dependency>
  <groupId>org.aspectj</groupId>
  <artifactId>aspectjweaver</artifactId>
  <version>1.9.7</version>
</dependency>

2、applicationContext.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd ">
    <bean id="userAOP" class="com.ape.aop.UserAOP"/>
    <bean id="userService" class="com.ape.service.impl.UserServiceImpl"/>
    <!--  配置切面 -->
    <aop:config>
        <!--  定義切點    -->
        <aop:pointcut id="pointcut" expression="execution(* com.ape.service.impl.*.*(..))"/>
        <!--  增強  -->
        <aop:aspect ref="userAOP">
            <!-- 前置通知 -->
            <aop:before pointcut-ref="pointcut" method="beforeAdvice"/>
            <!-- 后置通知 -->
            <aop:after-returning pointcut-ref="pointcut" method="afterReturnAdvice"/>
            <!-- 環(huán)繞通知 -->
            <aop:around pointcut-ref="pointcut" method="aoundAdvice"/>
            <!-- 異常通知 -->
            <aop:after-throwing pointcut-ref="pointcut" method="afterThrowAdvice"/>
            <!-- 最終通知 -->
            <aop:after pointcut-ref="pointcut" method="afterAdvice"/>
        </aop:aspect>
    </aop:config>
</beans>

3、或通過注解實現(xiàn)

@Aspect
@Component
public class UserAOP {
    @Pointcut("execution(* com.ape.service.impl.*.*(..))")
    public void pointcut() {
    }
    @Before("pointcut()")
    public void beforeAdvice(JoinPoint point) {
        System.out.println("前置增強:" + point.getSignature().getName());
    }
}

六、AOP的優(yōu)點

AOP 是 Spring 的核心之一,在 Spring 中經(jīng)常會使用 AOP 來簡化編程。在 Spring 框架中使用 AOP 主要有以下優(yōu)勢。

  • 提供聲明式企業(yè)服務,特別是作為 EJB 聲明式服務的替代品。最重要的是,這種服務是聲明式事務管理。
  • 允許用戶實現(xiàn)自定義切面。在某些不適合用 OOP 編程的場景中,采用 AOP 來補充。
  • 可以對業(yè)務邏輯的各個部分進行隔離,從而使業(yè)務邏輯各部分之間的耦合度降低,提高程序的可重用性,同時也提高了開發(fā)效率。

到此這篇關(guān)于Spring中的AOP面向切面編程詳解的文章就介紹到這了,更多相關(guān)SpringAOP詳解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot事件機制相關(guān)知識點匯總

    SpringBoot事件機制相關(guān)知識點匯總

    這篇文章主要介紹了SpringBoot事件機制相關(guān)知識點匯總,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • RxJava中map和flatMap的用法區(qū)別源碼解析

    RxJava中map和flatMap的用法區(qū)別源碼解析

    這篇文章主要為大家介紹了RxJava中map和flatMap的用法區(qū)別源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • maven多個倉庫查詢的優(yōu)先級順序案例講解

    maven多個倉庫查詢的優(yōu)先級順序案例講解

    這篇文章主要介紹了maven多個倉庫查詢的優(yōu)先級順序,考慮到我們常用的配置文件是conf/settings.xml和工程里面的pom.xml文件,我們針對這兩個文件的結(jié)合來分析倉庫的使用順序,需要的朋友可以參考下
    2023-04-04
  • hibernate和mybatis對比分析

    hibernate和mybatis對比分析

    通過本文給分享了hibernate和mybatis對比分析,從開發(fā)對比,系統(tǒng)調(diào)優(yōu)對比,對象管理與抓取策略,緩存機制對比等方面給大家詳細介紹,需要的朋友參考下吧
    2017-09-09
  • Java面試崗常見問題之ArrayList和LinkedList的區(qū)別

    Java面試崗常見問題之ArrayList和LinkedList的區(qū)別

    ArrayList和LinkedList作為我們Java中最常使用的集合類,很多人在被問到他們的區(qū)別時,憋了半天僅僅冒出一句:一個是數(shù)組一個是鏈表。這樣回答簡直讓面試官吐血。為了讓兄弟們打好基礎,我們通過實際的使用測試,好好說一下ArrayList和LinkedList的區(qū)別這道經(jīng)典的面試題
    2022-01-01
  • 解決maven項目tomcat啟動失敗war exploded:Error during artifact deploym問題

    解決maven項目tomcat啟動失敗war exploded:Error during 

    在SpringMVC項目中,使用war和warexploded兩種部署方式可能會導致不同的路徑問題,從而出現(xiàn)404錯誤,war模式將項目打包上傳,而warexploded模式則保持文件夾結(jié)構(gòu)上傳,開發(fā)時建議使用warexploded模式,方便利用Update classes and resources功能自動更新
    2024-10-10
  • SpringSecurity自定義Form表單使用方法講解

    SpringSecurity自定義Form表單使用方法講解

    這篇文章主要介紹了Spring Security自定義Form表單使用方法,雖然 Spring Security 提供了默認的登錄表單,實際項目里肯定是不可以直接使用的,當然 Spring Security 也提供了自定義登錄表單的功能
    2023-01-01
  • logback輸出日志屏蔽quartz的debug等級日志方式

    logback輸出日志屏蔽quartz的debug等級日志方式

    這篇文章主要介紹了logback輸出日志屏蔽quartz的debug等級日志方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java如何使用正則表達式從字符串中提取數(shù)字

    Java如何使用正則表達式從字符串中提取數(shù)字

    這篇文章主要介紹了Java如何使用正則表達式從字符串中提取數(shù)字問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Spring定時任務注解@Scheduled詳解

    Spring定時任務注解@Scheduled詳解

    這篇文章主要介紹了Spring定時任務注解@Scheduled詳解,@Scheduled注解是包org.springframework.scheduling.annotation中的一個注解,主要是用來開啟定時任務,本文提供了部分實現(xiàn)代碼與思路,需要的朋友可以參考下
    2023-09-09

最新評論

东阿县| 云南省| 漳平市| 固阳县| 大竹县| 奉化市| 久治县| 华安县| 保康县| 秦皇岛市| 苍山县| 逊克县| 玛沁县| 亚东县| 三都| 永顺县| 漳浦县| 克拉玛依市| 安远县| 米泉市| 通道| 城步| 宜春市| 蚌埠市| 车险| 铁岭县| 宁河县| 霍林郭勒市| 靖州| 错那县| 广元市| 黑龙江省| 会同县| 芷江| 屯门区| 砀山县| 静乐县| 永仁县| 登封市| 恩平市| 镇坪县|