中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java Spring之XML的AOP怎么配置

發布時間:2023-04-08 17:21:03 來源:億速云 閱讀:118 作者:iii 欄目:開發技術

本篇內容主要講解“Java Spring之XML的AOP怎么配置”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java Spring之XML的AOP怎么配置”吧!

    1 環境搭建

    • 示例:

      • 在學習 spring 的 aop 時,采用賬戶轉賬作為示例。把 spring 的 ioc 也一起應用進來。

    1.1 第一步:準備必要的代碼

    • 此處包含了實體類,業務層和持久層代碼。沿用上一章節中的代碼即可。

    1.2 第二步:拷貝必備的 jar 包到工程的 lib 目錄

    • 此處要拷貝 spring 的 ioc 和 aop 兩組 jar 包

    Java Spring之XML的AOP怎么配置

    1.3 第三步:創建 spring 的配置文件并導入約束

    • 此處要導入 aop 的約束

    <?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"></beans&gt;

    1.4 第四步:配置 spring 的 ioc

    <!-- 配置 service --><bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"> <property name="accountDao" ref="accountDao"></property></bean><!-- 配置 dao --><bean id="accountDao" class="com.itheima.dao.impl.AccountDaoImpl"> <property name="dbAssit" ref="dbAssit"></property></bean><!-- 配置數據庫操作對象 --><bean id="dbAssit" class="com.itheima.dbassit.DBAssit"> <property name="dataSource" ref="dataSource"></property> <!-- 指定 connection 和線程綁定 --> <property name="useCurrentConnection" value="true"></property></bean><!-- 配置數據源 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="com.mysql.jdbc.Driver"></property> <property name="jdbcUrl" value="jdbc:mysql:///spring_day02"></property> <property name="user" value="root"></property> <property name="password" value="1234"></property></bean>

    1.5 第五步:抽取公共代碼制作成通知

    • 事務控制類

    public class TransactionManager {
     
        //定義一個 DBAssit
        private DBAssit dbAssit ;
        
        public void setDbAssit(DBAssit dbAssit) {
            this.dbAssit = dbAssit;
        }
     
        //開啟事務
        public void beginTransaction() {
     
        
            try {
            
                dbAssit.getCurrentConnection().setAutoCommit(false);
            } catch (SQLException e) {
     
                e.printStackTrace();
            }
        }
     
     
        //提交事務
        public void commit() {
     
            try {
                dbAssit.getCurrentConnection().commit();
            } catch (SQLException e) {
     
                e.printStackTrace();
            }
        }
     
        //回滾事務
        public void rollback() {
     
            try {
                dbAssit.getCurrentConnection().rollback();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
     
        //釋放資源
        public void release() {
     
            try {
                dbAssit.releaseConnection();
            } catch (Exception e) {
     
                e.printStackTrace();
            }
        }
    }

    2 配置步驟

    2.1 第一步:把通知類用 bean 標簽配置起來

    <!-- 配置通知 --><bean id="txManager" class="com.itheima.utils.TransactionManager"> <property name="dbAssit" ref="dbAssit"></property></bean>

    2.2 第二步:使用 aop:config 聲明 aop 配置

    • aop:config:

      • 作用:用于聲明開始 aop 的配置

    <aop:config> <!-- 配置的代碼都寫在此處 --></aop:config>

    2.3 第三步:使用 aop:aspect 配置切面

    • aop:aspect:

      • id:給切面提供一個唯一標識。

      • ref:引用配置好的通知類 bean 的 id。

      • 用于配置切面。

      • 作用:

      • 屬性:

    <aop:aspect id="txAdvice" ref="txManager"> <!--配置通知的類型要寫在此處--></aop:aspect>

    2.4 第四步:使用 aop:pointcut 配置切入點表達式

    • aop:pointcut:

      • expression:用于定義切入點表達式。

      • id:用于給切入點表達式提供一個唯一標識

      • 用于配置切入點表達式。就是指定對哪些類的哪些方法進行增強。

      • 作用:

      • 屬性:

    <aop:pointcut expression="execution( public void com.itheima.service.impl.AccountServiceImpl.transfer( java.lang.String, java.lang.String, java.lang.Float ))" id="pt1"/>

    2.5 第五步:使用 aop:xxx 配置對應的通知類型

    • aop:before

      • 切入點方法執行之前執行

      • method:用于指定通知類中的增強方法名稱

      • ponitcut-ref:用于指定切入點的表達式的引用

      • poinitcut:用于指定切入點表達式

      • 用于配置前置通知。指定增強的方法在切入點方法之前執行

      • 作用:

      • 屬性:

      • 執行時間點:

    <aop:before method="beginTransaction" pointcut-ref="pt1"/>
    • aop:after-returning

      • 切入點方法正常執行之后。它和異常通知只能有一個執行

      • method:指定通知中方法的名稱。

      • pointct:定義切入點表達式

      • pointcut-ref:指定切入點表達式的引用

      • 用于配置后置通知

      • 作用:

      • 屬性:

      • 執行時間點:

    <aop:after-returning method="commit" pointcut-ref="pt1"/>
    • aop:after-throwing

      • 切入點方法執行產生異常后執行。它和后置通知只能執行一個

      • method:指定通知中方法的名稱。

      • pointct:定義切入點表達式

      • pointcut-ref:指定切入點表達式的引用

      • 用于配置異常通知

      • 作用:

      • 屬性:

      • 執行時間點:

    <aop:after-throwing method="rollback" pointcut-ref="pt1"/>
    • aop:after

      • 無論切入點方法執行時是否有異常,它都會在其后面執行。

      • method:指定通知中方法的名稱。

      • pointct:定義切入點表達式

      • pointcut-ref:指定切入點表達式的引用

      • 用于配置最終通知

      • 作用:

      • 屬性:

      • 執行時間點:

    <aop:after method="release" pointcut-ref="pt1"/>

    3 切入點表達式說明

    • execution:匹配方法的執行(常用)

      • execution(表達式)

    • 表達式語法:execution([修飾符] 返回值類型 包名.類名.方法名(參數))

    • 寫法說明:

      • 全匹配方式:

    public void com.itheima.service.impl.AccountServiceImpl.saveAccount(com.itheima.domain.Account)

    訪問修飾符可以省略

    void com.itheima.service.impl.AccountServiceImpl.saveAccount(com.itheima.domain.Account)

    返回值可以使用*號,表示任意返回值

    * com.itheima.service.impl.AccountServiceImpl.saveAccount(com.itheima.domain.Account)

    包名可以使用*號,表示任意包,但是有幾級包,需要寫幾個*

    * *.*.*.*.AccountServiceImpl.saveAccount(com.itheima.domain.Account)

    使用..來表示當前包,及其子包

    * com..AccountServiceImpl.saveAccount(com.itheima.domain.Account)

    類名可以使用*號,表示任意類

    * com..*.saveAccount(com.itheima.domain.Account)

    方法名可以使用*號,表示任意方法

    * com..*.*( com.itheima.domain.Account)

    參數列表可以使用*,表示參數可以是任意數據類型,但是必須有參數

    * com..*.*(*)

    參數列表可以使用..表示有無參數均可,有參數可以是任意類型

    * com..*.*(..)

    全通配方式:

    * *..*.*(..)

    注: 通常情況下,我們都是對業務層的方法進行增強,所以切入點表達式都是切到業務層實現類。

    execution(* com.itheima.service.impl.*.*(..))

    4 環繞通知

    配置方式:

    <aop:config>
        <aop:pointcut expression="execution(* com.itheima.service.impl.*.*(..))" id="pt1"/>
        <aop:aspect id="txAdvice" ref="txManager">
            <!-- 配置環繞通知 -->
            <aop:around method="transactionAround" pointcut-ref="pt1"/>
        </aop:aspect>
    </aop:config>
    • aop:around:

      • 通常情況下,環繞通知都是獨立使用的

      • /**

      • * 環繞通知

      • * @param pjp

      • * spring 框架為我們提供了一個接口:ProceedingJoinPoint,它可以作為環繞通知的方法參數。

      • * 在環繞通知執行時,spring 框架會為我們提供該接口的實現類對象,我們直接使用就行。

      • * @return

      • */

      • 它是 spring 框架為我們提供的一種可以在代碼中手動控制增強代碼什么時候執行的方式。

      • method:指定通知中方法的名稱。

      • pointct:定義切入點表達式

      • pointcut-ref:指定切入點表達式的引用

      • 用于配置環繞通知

      • 作用:

      • 屬性:

      • 說明:

      • 注意:

    public Object transactionAround(ProceedingJoinPoint pjp) {
     
        //定義返回值
        Object rtValue = null;
     
        try {
     
            //獲取方法執行所需的參數
            Object[] args = pjp.getArgs();
     
            //前置通知:開啟事務
            beginTransaction();
     
            //執行方法
            rtValue = pjp.proceed(args);
     
            //后置通知:提交事務
            commit();
        }catch(Throwable e) {
     
            //異常通知:回滾事務
            rollback();
            e.printStackTrace();
        }finally {
     
            //最終通知:釋放資源
            release();
        }
     
        return rtValue;
    }

    到此,相信大家對“Java Spring之XML的AOP怎么配置”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    潞西市| 专栏| 焦作市| 凤山市| 嘉义市| 黄龙县| 定兴县| 阳江市| 分宜县| 祁连县| 平度市| 磐石市| 项城市| 登封市| 黄浦区| 玉林市| 绍兴县| 洮南市| 容城县| 东宁县| 阿瓦提县| 潞城市| 上蔡县| 桐梓县| 新竹市| 基隆市| 疏附县| 沾益县| 万载县| 锡林郭勒盟| 上犹县| 涞源县| 乐业县| 彰化市| 武义县| 浮山县| 曲靖市| 汤原县| 汤阴县| 乐山市| 丹巴县|