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

溫馨提示×

溫馨提示×

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

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

Java Spring之基于注解的AOP怎么配置

發布時間:2023-04-06 11:45:23 來源:億速云 閱讀:135 作者:iii 欄目:開發技術

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

    1 環境搭建

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

    • 拷貝上一小節的工程即可。

    1.2 第二步:在配置文件中導入 context 的名稱空間

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        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
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd">
     
        <!-- 配置數據庫操作對象 -->
        <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>
    </beans>

    1.3 第三步:把資源使用注解配置

    • 賬戶的業務層實現類

    @Service("accountService")
    public class AccountServiceImpl implements IAccountService {
     
        @Autowired
        private IAccountDao accountDao;
    }
    • 賬戶的持久層實現類

    @Repository("accountDao")
    public class AccountDaoImpl implements IAccountDao {
        @Autowired
        private DBAssit dbAssit ;
    }

     1.4 第四步:在配置文件中指定 spring 要掃描的包

    <!-- 告知 spring,在創建容器時要掃描的包 -->
    <context:component-scan base-package="com.itheima"></context:component-scan>

    2 配置步驟

    2.1 第一步:把通知類也使用注解配置

    • 事務控制類

    @Component("txManager")
    public class TransactionManager {
     
        //定義一個 DBAssit
        @Autowired
        private DBAssit dbAssit ;
    }

    2.2 第二步:在通知類上使用@Aspect 注解聲明為切面

    • 作用:

      • 把當前類聲明為切面類。

    • 事務控制類

    @Component("txManager")
    @Aspect//表明當前類是一個切面類
    public class TransactionManager {
     
        //定義一個 DBAssit
        @Autowired
        private DBAssit dbAssit ;
    }

    2.3 第三步:在增強的方法上使用注解配置通知

    2.3.1 @Before
    • 作用:

      • 把當前方法看成是前置通知。

    • 屬性:

      • value:用于指定切入點表達式,還可以指定切入點表達式的引用。

    //開啟事務
    @Before("execution(* com.itheima.service.impl.*.*(..))")
    public void beginTransaction() {
     
        try {
            dbAssit.getCurrentConnection().setAutoCommit(false);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    2.3.2 @AfterReturning
    • 作用:

      • 把當前方法看成是后置通知。

    • 屬性:

      • value:用于指定切入點表達式,還可以指定切入點表達式的引用

    //提交事務
    @AfterReturning("execution(* com.itheima.service.impl.*.*(..))")
    public void commit() {
     
        try {
            dbAssit.getCurrentConnection().commit();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    2.3.3 @AfterThrowing
    • 作用:

      • 把當前方法看成是異常通知。

    • 屬性:

      • value:用于指定切入點表達式,還可以指定切入點表達式的引用

    //回滾事務
    @AfterThrowing("execution(* com.itheima.service.impl.*.*(..))")
    public void rollback() {
     
        try {
            dbAssit.getCurrentConnection().rollback();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    2.3.4 @After
    • 作用:

      • 把當前方法看成是最終通知。

    • 屬性:

      • value:用于指定切入點表達式,還可以指定切入點表達式的引用

    //釋放資源
    @After("execution(* com.itheima.service.impl.*.*(..))")
    public void release() {
     
        try {
            dbAssit.releaseConnection();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    2.4 第四步:在 spring 配置文件中開啟 spring 對注解 AOP 的支持

    <!-- 開啟 spring 對注解 AOP 的支持 -->
    <aop:aspectj-autoproxy/>

    3 環繞通知注解配置 @Around

    • 作用:

      • 把當前方法看成是環繞通知。

    • 屬性:

      • value:用于指定切入點表達式,還可以指定切入點表達式的引用。

    /**
    * 環繞通知
    * @param pjp
    * @return
    */
    @Around("execution(* com.itheima.service.impl.*.*(..))")
    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;
    }

    4 切入點表達式注解 @Pointcut

    • 作用:

      • 指定切入點表達式

    • 屬性:

      • value:指定表達式的內容

    @Pointcut("execution(* com.itheima.service.impl.*.*(..))")
    private void pt1() {}
     
        /**
        * 引用方式:
        * 環繞通知
        * @param pjp
        * @return
        */
        @Around("pt1()")//注意:千萬別忘了寫括號
        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;
    }

    5 不使用 XML 的配置方式

    @Configuration
    @ComponentScan(basePackages="com.itheima")
    @EnableAspectJAutoProxy
    public class SpringConfiguration {
     
    }

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

    向AI問一下細節

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

    AI

    南漳县| 彭水| 通辽市| 大埔区| 财经| 上思县| 开化县| 碌曲县| 新干县| 伊宁市| 宣汉县| 宿迁市| 崇仁县| 万山特区| 太原市| 五台县| 北流市| 达州市| 岚皋县| 错那县| 天津市| 平顺县| 页游| 广河县| 富宁县| 韶山市| 邵阳县| 连城县| 公主岭市| 博客| 宣威市| 绥中县| 新宾| 肥西县| 和田市| 固始县| 鸡泽县| 横峰县| 冕宁县| 湾仔区| 容城县|