日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring的AOP思想和实现AOP思想的框架AspectJ

發布時間:2025/4/16 javascript 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring的AOP思想和实现AOP思想的框架AspectJ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

章節目標:詳細解釋什么是Spring AOP思想和對于該思想實現的AspectJ框架的實現用法。

一.AOP面向切面編程

1.AOP概述

AOP(Aspect Orient Programming)面向切面編程,賣你想切面編程是從倒臺角度烤爐程序運行過程。

AOP底層,采用的是動態代理模式實現的。具體實現采用了兩種動態代理:JDK動態代理和CGLIB動態代理。

AOP意為面向切面編程,可以通過運行期動態代理實現程序功能的統一維護的一種思想。AOP是Spring框架中的一個重要內容。利用AOP可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度減低,提高程序的可重用性,同時提高了開發的效率。

面向切面編程,就是將交叉業務邏輯封裝成切面,利用AOP容器的功能將切面織入到主業務邏輯中。所謂交叉邏輯是指,通用的和主業務邏輯沒有關系的代碼。如安全檢查、事務、日志、緩存等。

若不使用AOP,則會出現代碼糾纏,即交叉業務邏輯和主業務邏輯混合在一起,這樣會使著業務邏輯混雜不清。

例如:轉賬業務,在實現轉賬業務邏輯的前后,需要權限控制,日志記錄,加載事務,結束事務等交叉業務邏輯,而這些業務邏輯和主業務邏輯之間并沒有直接關系。但是他們的代碼量所占比重可以達到總代碼量的一版甚至還多。它們的存在,不僅僅產生了大量的“冗余”代碼,還大大干擾了主業務邏輯。

2.AOP思想有什么好處

3.AOP編程術語

(1)切面(Aspect)

切面泛指交叉業務邏輯,例如:事務處理、日志處理就可以理解為切面。常用的切面是通知(Advice).實際就是對業務邏輯的一種增強。

切面就是一個普通類,將用于增強目標類功能的其他功能封裝到一個類中,這個類就叫切面類,切面類需要使用@Aspect注解標注,切面類中用于增強目標類功能的方法就是普通方法,通過配置文件、將切面中的功能增強到目標類的目標方法中。



二.AspectJ

1.AspectJ概述


2.AspectJ切入點表達式


3.AspectJ的通知類型

AspectJ中常用的通知類型有五種類型:
前置通知:Before()
后置通知:AfterReturning()
環繞通知:Around()
異常通知:AfterThrowing()
最終通知:After()

4.初始化Aspectj開發環境

加入Spring框架的依賴和AspectJ依賴

在使用AspectJ框架實現AOP思想的時候,要引入AOP的約束,配置文件中使用AOP約束中的標簽都是AspectJ框架中的,而不是Spring框架本身的。AsprctJ對于AOP思想的實現有注解和配置文件兩種方式,這里講解的是注解方式。

5.AspectJ基于注解的方式實現AOP思想

(1)定義業務接口和實現類


(2)定義切面類

(3)在spring核心配置文件中聲明 切面類和目標類對象

(4)注冊AspectJ的自動代理

<?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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttps://www.springframework.org/schema/aop/spring-aop.xsd"><!--把對象交給spring容器,由spring容器統一創建,管理對象--><!--聲明目標對象--><bean id="someService" class="com.bjpowernode.ba01.SomeServiceImpl" /><!--聲明切面類對象--><bean id="myAspect" class="com.bjpowernode.ba01.MyAspect" /><!--聲明自動代理生成器:使用aspectj框架內部的功能,創建目標對象的代理對象。創建代理對象是在內存中實現的, 修改目標對象的內存中的結構。 創建為代理對象所以目標對象就是被修改后的代理對象.aspectj-autoproxy:會把spring容器中的所有的目標對象,一次性都生成代理對象。--><aop:aspectj-autoproxy /><!--有接口也想用cjlib實現動態代理:如果你期望目標類有接口,使用cglib代理proxy-target-class="true":告訴框架,要使用cglib動態代理--> <!-- <aop:aspectj-autoproxy proxy-target-class="true"/>--> </beans>

6.AspectJ中實現動態代理

1.目標類有接口默認使用的是JDK動態代理;
2. 目標類沒有接口默認使用的是CJLIB動態代理;
3. 目標類有接口也可以使用CJLIB動態代理,但是需要設置spring核心配置文件中的<aop:aspectj-autoproxy >標簽;

修改spring的核心配置文件

<?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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttps://www.springframework.org/schema/aop/spring-aop.xsd"><!--把對象交給spring容器,由spring容器統一創建,管理對象--><!--聲明目標對象--><bean id="someService" class="com.bjpowernode.ba01.SomeServiceImpl" /><!--聲明切面類對象--><bean id="myAspect" class="com.bjpowernode.ba01.MyAspect" /><!--聲明自動代理生成器:使用aspectj框架內部的功能,創建目標對象的代理對象。創建代理對象是在內存中實現的, 修改目標對象的內存中的結構。 創建為代理對象所以目標對象就是被修改后的代理對象.aspectj-autoproxy:會把spring容器中的所有的目標對象,一次性都生成代理對象。--><aop:aspectj-autoproxy /><!--有接口也想用cjlib實現動態代理:如果你期望目標類有接口,使用cglib代理proxy-target-class="true":告訴框架,要使用cglib動態代理--> <!-- <aop:aspectj-autoproxy proxy-target-class="true"/>--> </beans>

三.AspectJ的常用通知類型

1.@Before前置通知-參數JoinPoint

2.@AfterReturning后置通知-returning屬性

  • @Around環繞通知- ProceedingJoinPoint 參數
  • @AfterThrowing異常通知-throwing屬性
  • 5.@After最終通知(相當于finally)


    6.@Pointcut定義切入點

    總結

    以上是生活随笔為你收集整理的Spring的AOP思想和实现AOP思想的框架AspectJ的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。