Cara mengkonfigurasi AOP berasaskan anotasi Java Spring
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>
1.3 Langkah 3: Konfigurasikan anotasi penggunaan sumber
Kelas pelaksanaan lapisan perniagaan Akaun
@Service("accountService") public class AccountServiceImpl implements IAccountService { @Autowired private IAccountDao accountDao; }
Kelas pelaksanaan lapisan kegigihan Akaun
1.4 Langkah 4: Tentukan pakej untuk diimbas oleh spring dalam fail konfigurasi
@Repository("accountDao") public class AccountDaoImpl implements IAccountDao { @Autowired private DBAssit dbAssit ; }
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>
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 ; }
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 ; }
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(); } }
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(); } }
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(); } }
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(); } }
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/>
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; }
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; }
Atas ialah kandungan terperinci Cara mengkonfigurasi AOP berasaskan anotasi Java Spring. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Cuti atau kembali dari Java 8 Stream Foreach?
