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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

java aop 实例_Spring aop 简单示例

發(fā)布時(shí)間:2023/12/3 javascript 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java aop 实例_Spring aop 简单示例 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

簡(jiǎn)單的記錄一下spring aop的一個(gè)示例

基于兩種配置方式:

基于xml配置

基于注解配置

這個(gè)例子是模擬對(duì)數(shù)據(jù)庫(kù)的更改操作添加事物

其實(shí)并沒(méi)有添加,只是簡(jiǎn)單的輸出了一下記錄

首先看下整個(gè)例子的目錄圖

全部代碼就不貼了,數(shù)目有點(diǎn)多,不過(guò)很簡(jiǎn)單,看一部分就能夠明白

第一種配置方式

基于xml方式配置

首先將service,dao注冊(cè)到spring容器

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

接下來(lái)看下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 }

要做的事情很簡(jiǎn)單,插入一條數(shù)據(jù),刪除一條數(shù)據(jù)

接下來(lái)看下切面代碼

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 //環(huán)繞通知

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 }

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

1

2

3

4

5

6

7

8

9

10

11

這里沒(méi)有演示環(huán)繞通知

好了,運(yùn)行測(cè)試代碼

測(cè)試代碼如下

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 }

控制臺(tái)輸出如下

begin transaction

添加成功

commit transaction

begin transaction

刪除成功

commit transaction

現(xiàn)在來(lái)測(cè)試一下環(huán)繞通知

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

修改后的代碼

1

2

3

4

5

6

7

8

9

運(yùn)行測(cè)試代碼

輸出如下

begin transaction

添加成功

commit transaction

begin transaction

刪除成功

commit transaction

好了,現(xiàn)在貼下如何用注解的方法

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

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

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

完畢

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

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

如果用javaConfig方式的話

需要在配置類(lèi)上加上?@EnableAspectJAutoProxy 注解

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

切面上除了要加上@Aspect注解標(biāo)識(shí)為這是一個(gè)切面bean之外

還需要在上面加上@component這個(gè)注解

很急很關(guān)鍵

排錯(cuò)的時(shí)候只關(guān)注切點(diǎn)表達(dá)式的問(wèn)題了

當(dāng)時(shí)一直在找切點(diǎn)表達(dá)式的問(wèn)題

其實(shí)這個(gè)表達(dá)式寫(xiě)的是沒(méi)有問(wèn)題的

是配置切面bean的時(shí)候出的問(wèn)題

深坑

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。