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

歡迎訪問 生活随笔!

生活随笔

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

javascript

java aop 实例_Spring aop 简单示例

發布時間:2023/12/3 javascript 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java aop 实例_Spring aop 简单示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡單的記錄一下spring aop的一個示例

基于兩種配置方式:

基于xml配置

基于注解配置

這個例子是模擬對數據庫的更改操作添加事物

其實并沒有添加,只是簡單的輸出了一下記錄

首先看下整個例子的目錄圖

全部代碼就不貼了,數目有點多,不過很簡單,看一部分就能夠明白

第一種配置方式

基于xml方式配置

首先將service,dao注冊到spring容器

配置一下掃描包還是很方便的

接下來看下service

1 packagecom.yangxin.core.service.impl;2

3 importorg.springframework.beans.factory.annotation.Autowired;4 importorg.springframework.stereotype.Service;5

6 importcom.yangxin.core.dao.UserDao;7 importcom.yangxin.core.pojo.User;8 importcom.yangxin.core.service.UserService;9

10 @Service11 public class UserServiceImpl implementsUserService {12

13 @Autowired14 privateUserDao userDao;15

16 @Override17 public voidaddUser(User user) {18 userDao.insertUser(user);19 System.out.println("添加成功");20 }21

22 @Override23 public voiddeleteUser(String name) {24 userDao.deteleUser(name);25 System.out.println("刪除成功");26 }27

28 }

要做的事情很簡單,插入一條數據,刪除一條數據

接下來看下切面代碼

1 packagecom.yangxin.core.transaction;2

3 importorg.aspectj.lang.ProceedingJoinPoint;4

5 importcom.yangxin.core.pojo.User;6

7 public classTransactionDemo {8

9 //前置通知

10 public voidstartTransaction(){11 System.out.println("begin transaction ");12 }13

14 //后置通知

15 public voidcommitTransaction(){16 System.out.println("commit transaction ");17 }18

19 //環繞通知

20 public void around(ProceedingJoinPoint joinPoint) throwsThrowable{21 System.out.println("begin transaction");22

23 joinPoint.proceed();24

25 System.out.println("commit transaction");26 }27

28 }

然后看下這個切面在applicationContext.xml中是如何配置的

1

2

3

4

5

6

7

8

9

10

11

這里沒有演示環繞通知

好了,運行測試代碼

測試代碼如下

1   @Test2 public voidtest1(){3 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring/applicationContext.xml");4

5 UserService userService = applicationContext.getBean(UserService.class);6

7 User user = newUser();8

9 user.setAge(19);10 user.setName("yangxin");11

12 userService.addUser(user);13 userService.deteleUser("yangxin");

1415

16 }

控制臺輸出如下

begin transaction

添加成功

commit transaction

begin transaction

刪除成功

commit transaction

現在來測試一下環繞通知

修改一下applicationContext.xml中的配置切面那一部分

修改后的代碼

1

2

3

4

5

6

7

8

9

運行測試代碼

輸出如下

begin transaction

添加成功

commit transaction

begin transaction

刪除成功

commit transaction

好了,現在貼下如何用注解的方法

貼下基于注解的切面的代碼

1 packagecom.yangxin.core.transaction;2

3 importorg.aspectj.lang.ProceedingJoinPoint;4 importorg.aspectj.lang.annotation.AfterReturning;5 importorg.aspectj.lang.annotation.Around;6 importorg.aspectj.lang.annotation.Aspect;7 importorg.aspectj.lang.annotation.Before;8 importorg.aspectj.lang.annotation.Pointcut;9

10 @Aspect11 public classTransactionDemo2 {12

13 @Pointcut(value="execution(* com.yangxin.core.service.*.*.*(..))")14 public voidpoint(){15

16 }17

18 @Before(value="point()")19 public voidbefore(){20 System.out.println("transaction begin");21 }22

23 @AfterReturning(value = "point()")24 public voidafter(){25 System.out.println("transaction commit");26 }27

28 @Around("point()")29 public void around(ProceedingJoinPoint joinPoint) throwsThrowable{30 System.out.println("transaction begin");31 joinPoint.proceed();32 System.out.println("transaction commit");33

34 }35 }

在applicationContext.xml中配置

1

1

測試步驟和以上一致,這里就不貼了

完畢

記一下使用javaConfig配置方式的一些坑

以上 切面 不管是基于注解的還是基于xml配置的 ? 這里把切面加載到容器中都是用xml配置bean的方式

如果用javaConfig方式的話

需要在配置類上加上?@EnableAspectJAutoProxy 注解

然后如果使用掃包的方式配置切面bean的話

切面上除了要加上@Aspect注解標識為這是一個切面bean之外

還需要在上面加上@component這個注解

很急很關鍵

排錯的時候只關注切點表達式的問題了

當時一直在找切點表達式的問題

其實這個表達式寫的是沒有問題的

是配置切面bean的時候出的問題

深坑

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的java aop 实例_Spring aop 简单示例的全部內容,希望文章能夠幫你解決所遇到的問題。

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