Jadual Kandungan
1 Persediaan persekitaran
1.1 Langkah 1: Sediakan kod dan pakej balang yang diperlukan
1.2 Langkah 2: Import ruang nama konteks dalam fail konfigurasi
1.3 Langkah 3: Konfigurasikan anotasi penggunaan sumber
1.4 Langkah 4: Tentukan pakej untuk diimbas oleh spring dalam fail konfigurasi
2 Langkah konfigurasi
2.1 Langkah 1: Konfigurasikan kelas pemberitahuan menggunakan anotasi
2.2 Langkah 2: Gunakan anotasi @Aspect pada kelas pemberitahuan untuk mengisytiharkannya sebagai aspek
2.3 Langkah 3: Gunakan anotasi untuk mengkonfigurasi pemberitahuan pada kaedah yang dipertingkatkan
2.3.1 @Sebelum
2.3.2 @AfterReturning
2.3.3 @AfterThrowing
2.3.4 @Selepas
2.4 Langkah 4: Dayakan sokongan spring untuk anotasi AOP dalam fail konfigurasi spring
3 Sekitar konfigurasi anotasi pemberitahuan @Around
4 anotasi ungkapan pointcut @Pointcut
5 Kaedah konfigurasi tanpa XML
Rumah Java javaTutorial Cara mengkonfigurasi AOP berasaskan anotasi Java Spring

Cara mengkonfigurasi AOP berasaskan anotasi Java Spring

May 17, 2023 pm 05:37 PM
java spring aop

    1 Persediaan persekitaran

    1.1 Langkah 1: Sediakan kod dan pakej balang yang diperlukan

    • Salin Projek ringkas sudah cukup.

    1.2 Langkah 2: Import ruang nama konteks dalam fail konfigurasi

    <?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>
    Salin selepas log masuk

    1.3 Langkah 3: Konfigurasikan anotasi penggunaan sumber

    • Kelas pelaksanaan lapisan perniagaan Akaun

    @Service("accountService")
    public class AccountServiceImpl implements IAccountService {
     
        @Autowired
        private IAccountDao accountDao;
    }
    Salin selepas log masuk
    • Kelas pelaksanaan lapisan kegigihan Akaun

    rreee

    1.4 Langkah 4: Tentukan pakej untuk diimbas oleh spring dalam fail konfigurasi

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

    2 Langkah konfigurasi

    2.1 Langkah 1: Konfigurasikan kelas pemberitahuan menggunakan anotasi

    • Kelas kawalan transaksi

    <!-- 告知 spring,在创建容器时要扫描的包 -->
    <context:component-scan base-package="com.itheima"></context:component-scan>
    Salin selepas log masuk

    2.2 Langkah 2: Gunakan anotasi @Aspect pada kelas pemberitahuan untuk mengisytiharkannya sebagai aspek

    • Fungsi:

      • Isytiharkan kelas semasa sebagai kelas aspek.

    • Kelas kawalan transaksi

    @Component("txManager")
    public class TransactionManager {
     
        //定义一个 DBAssit
        @Autowired
        private DBAssit dbAssit ;
    }
    Salin selepas log masuk

    2.3 Langkah 3: Gunakan anotasi untuk mengkonfigurasi pemberitahuan pada kaedah yang dipertingkatkan

    2.3.1 @Sebelum
    • Fungsi:

      • Anggap kaedah semasa sebagai pra-pemberitahuan.

    • Atribut:

      • nilai: digunakan untuk menentukan ungkapan titik masuk, anda juga boleh menentukan ungkapan titik masuk petikan.

    @Component("txManager")
    @Aspect//表明当前类是一个切面类
    public class TransactionManager {
     
        //定义一个 DBAssit
        @Autowired
        private DBAssit dbAssit ;
    }
    Salin selepas log masuk
    2.3.2 @AfterReturning
    • Fungsi:

      • Fikirkan kaedah semasa sebagai nasihat selepas.

    • Atribut:

      • nilai: digunakan untuk menentukan ungkapan titik masuk, anda juga boleh menentukan ungkapan titik masuk Petikan

    //开启事务
    @Before("execution(* com.itheima.service.impl.*.*(..))")
    public void beginTransaction() {
     
        try {
            dbAssit.getCurrentConnection().setAutoCommit(false);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    Salin selepas log masuk
    2.3.3 @AfterThrowing
    • Fungsi:

      • Anggap kaedah semasa sebagai pemberitahuan pengecualian.

    • Atribut:

      • nilai: digunakan untuk menentukan ungkapan titik masuk, anda juga boleh menentukan ungkapan titik masuk Petikan

    //提交事务
    @AfterReturning("execution(* com.itheima.service.impl.*.*(..))")
    public void commit() {
     
        try {
            dbAssit.getCurrentConnection().commit();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    Salin selepas log masuk
    2.3.4 @Selepas
    • Fungsi:

      • Anggap kaedah semasa sebagai pemberitahuan akhir.

    • Atribut:

      • nilai: digunakan untuk menentukan ungkapan titik masuk, anda juga boleh menentukan ungkapan titik masuk Petikan

    //回滚事务
    @AfterThrowing("execution(* com.itheima.service.impl.*.*(..))")
    public void rollback() {
     
        try {
            dbAssit.getCurrentConnection().rollback();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    Salin selepas log masuk

    2.4 Langkah 4: Dayakan sokongan spring untuk anotasi AOP dalam fail konfigurasi spring

    //释放资源
    @After("execution(* com.itheima.service.impl.*.*(..))")
    public void release() {
     
        try {
            dbAssit.releaseConnection();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    Salin selepas log masuk

    3 Sekitar konfigurasi anotasi pemberitahuan @Around

    • Fungsi:

      • Anggap kaedah semasa sebagai pemberitahuan sekeliling.

    • Atribut:

      • nilai: digunakan untuk menentukan ungkapan titik masuk, anda juga boleh menentukan ungkapan titik masuk petikan.

    <!-- 开启 spring 对注解 AOP 的支持 -->
    <aop:aspectj-autoproxy/>
    Salin selepas log masuk

    4 anotasi ungkapan pointcut @Pointcut

    • Fungsi:

      • Nyatakan ungkapan pointcut

    • Atribut:

      • nilai: Tentukan kandungan ungkapan

    /**
    * 环绕通知
    * @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;
    }
    Salin selepas log masuk

    5 Kaedah konfigurasi tanpa XML

    @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;
    }
    Salin selepas log masuk

    Atas ialah kandungan terperinci Cara mengkonfigurasi AOP berasaskan anotasi Java Spring. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan Laman Web ini
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

    Alat AI Hot

    Undresser.AI Undress

    Undresser.AI Undress

    Apl berkuasa AI untuk mencipta foto bogel yang realistik

    AI Clothes Remover

    AI Clothes Remover

    Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

    Undress AI Tool

    Undress AI Tool

    Gambar buka pakaian secara percuma

    Clothoff.io

    Clothoff.io

    Penyingkiran pakaian AI

    AI Hentai Generator

    AI Hentai Generator

    Menjana ai hentai secara percuma.

    Artikel Panas

    R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
    2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    Repo: Cara menghidupkan semula rakan sepasukan
    4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
    3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

    Alat panas

    Notepad++7.3.1

    Notepad++7.3.1

    Editor kod yang mudah digunakan dan percuma

    SublimeText3 versi Cina

    SublimeText3 versi Cina

    Versi Cina, sangat mudah digunakan

    Hantar Studio 13.0.1

    Hantar Studio 13.0.1

    Persekitaran pembangunan bersepadu PHP yang berkuasa

    Dreamweaver CS6

    Dreamweaver CS6

    Alat pembangunan web visual

    SublimeText3 versi Mac

    SublimeText3 versi Mac

    Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

    Akar Kuasa Dua di Jawa Akar Kuasa Dua di Jawa Aug 30, 2024 pm 04:26 PM

    Akar Kuasa Dua di Jawa

    Nombor Sempurna di Jawa Nombor Sempurna di Jawa Aug 30, 2024 pm 04:28 PM

    Nombor Sempurna di Jawa

    Penjana Nombor Rawak di Jawa Penjana Nombor Rawak di Jawa Aug 30, 2024 pm 04:27 PM

    Penjana Nombor Rawak di Jawa

    Weka di Jawa Weka di Jawa Aug 30, 2024 pm 04:28 PM

    Weka di Jawa

    Nombor Armstrong di Jawa Nombor Armstrong di Jawa Aug 30, 2024 pm 04:26 PM

    Nombor Armstrong di Jawa

    Nombor Smith di Jawa Nombor Smith di Jawa Aug 30, 2024 pm 04:28 PM

    Nombor Smith di Jawa

    Soalan Temuduga Java Spring Soalan Temuduga Java Spring Aug 30, 2024 pm 04:29 PM

    Soalan Temuduga Java Spring

    Cuti atau kembali dari Java 8 Stream Foreach? Cuti atau kembali dari Java 8 Stream Foreach? Feb 07, 2025 pm 12:09 PM

    Cuti atau kembali dari Java 8 Stream Foreach?

    See all articles