av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

spring項(xiàng)目中切面及AOP的使用方法

瀏覽:5日期:2023-07-06 08:25:17
使用AOP的原因(AOP簡(jiǎn)介)

我們知道,spring兩大核心,IOC(控制反轉(zhuǎn))和AOP(切面),那為什么要使用AOP,AOP是什么呢,嚴(yán)格來(lái)說(shuō),AOP是一種編程規(guī)范,是一種編程思想,并非spring創(chuàng)造,AOP可以幫助我們?cè)谝欢ǔ潭壬蠌娜哂嗟耐ㄓ玫臉I(yè)務(wù)邏輯中解脫出來(lái),最明顯的,比如每個(gè)接口的請(qǐng)求,都要記錄日志,那這個(gè)操作如果每個(gè)地方都寫,就會(huì)很繁瑣,當(dāng)然,記錄日志并不是唯一的用法

spring的AOP只能基于IOC來(lái)管理,它只能作用于spring容器的bean

并且,spring的AOP為的是解決企業(yè)開(kāi)發(fā)中出現(xiàn)最普遍的方法織入,并不是為了像AspectJ那樣,成為一個(gè)完全的AOP使用解決方案

AOP的使用

開(kāi)啟AOP支持

要使用AOP,首先要開(kāi)啟AOP的支持

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId></dependency>

啟動(dòng)類添加 @EnableAspectJAutoProxy 注解

編寫切面類與測(cè)試方法

@Aspect@Componentpublic class MyAop { }

@RestControllerpublic class OneController { @GetMapping('/doCheck') public String doCheck (int age) {System.out.println('doCheck');if (age > 1) {throw new MyException(ExceptionEnu.SUCCESS);} else { throw new MyException(ExceptionEnu.FAILD);} } }

記得切面類交給spring管理哦~ @Component

編寫切面方法

@Before

這個(gè)注解的用法呢,就是說(shuō),在執(zhí)行你要執(zhí)行的東西之前,執(zhí)行加了這個(gè)注解的方法

比如

@Before(value = 'execution (* own.study.web.OneController.*(..))') public void doAop( ) {System.out.println('before aop'); }

也就是說(shuō),如果我要調(diào)用 OneController 的方法,在調(diào)用到之前,會(huì)執(zhí)行這個(gè) doAop 方法

讓我們來(lái)測(cè)試一下

spring項(xiàng)目中切面及AOP的使用方法

@After

這個(gè)注解的用法,就是說(shuō),當(dāng)你執(zhí)行完你的方法之后,真的返回給調(diào)用方之前,執(zhí)行加了這個(gè)注解的方法

比如

@After(value = 'execution (* own.study.web.OneController.*(..))') public void doAfter() {System.out.println('after aop'); }

讓我們來(lái)測(cè)試一下

spring項(xiàng)目中切面及AOP的使用方法

@AfterThrowing

見(jiàn)名知意,在發(fā)生異常后,執(zhí)行加了此注解的方法

注意我上面寫的測(cè)試方法了嗎?我拋出了自定義的異常

讓我們測(cè)試一下

spring項(xiàng)目中切面及AOP的使用方法

@AfterReturning

這個(gè)注解的用法也是看名字就能猜到,執(zhí)行完后,執(zhí)行此方法

但是!這個(gè)執(zhí)行完,指的是正常執(zhí)行完,不拋出異常的那種,不信?我們來(lái)試試

spring項(xiàng)目中切面及AOP的使用方法

@Around

這個(gè)是最為強(qiáng)大的一個(gè)注解,環(huán)繞通知,方法執(zhí)行前和執(zhí)行后都會(huì)執(zhí)行加了這個(gè)注解的方法

@Around(value = 'execution (* own.study.web.OneController.*(..))') public Object doAround (ProceedingJoinPoint point) throws Throwable {Gson gson = new Gson();System.out.println('進(jìn)入AOP --->' + System.currentTimeMillis());System.out.println('方法名 = ' + point.getSignature().toShortString()); Object result = point.proceed(); System.out.println('響應(yīng)參數(shù)為 = ' + gson.toJson(result));System.out.println('AOP完事了 --->' + System.currentTimeMillis());return result; }

@RestControllerpublic class OneController { @GetMapping('/doCheck') public Object doCheck (int age) throws InterruptedException {System.out.println('這個(gè)是controller的方法 --->' + System.currentTimeMillis());Thread.sleep(2000l);System.out.println('doCheck');return new MyRsp('1', 'success'); } }

spring項(xiàng)目中切面及AOP的使用方法

但是,注意!這個(gè)環(huán)繞通知不是萬(wàn)能的,不是一定好,大家按需要使用,比如一個(gè)場(chǎng)景,當(dāng)你的方法拋出了異常,這個(gè)環(huán)繞通知就不會(huì)再繼續(xù)執(zhí)行

我們來(lái)實(shí)驗(yàn)一下

改寫controller的方法

@RestControllerpublic class OneController { @GetMapping('/doCheck') public Object doCheck (int age) throws InterruptedException {System.out.println('這個(gè)是controller的方法 --->' + System.currentTimeMillis());Thread.sleep(2000l);System.out.println('doCheck');throw new MyException('1', 'success'); // return new MyRsp('1', 'success'); } }

spring項(xiàng)目中切面及AOP的使用方法

看,AOP后續(xù)的沒(méi)有被執(zhí)行

以上就是spring的切面,AOP的使用的詳細(xì)內(nèi)容,更多關(guān)于spring的切面,AOP的使用的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 一本色道久久加勒比精品 | 国产精品伊人 | 中文字幕高清在线 | 99视频+国产日韩欧美 | 91欧美日韩| 天堂资源| igao在线观看| 日韩欧美影院 | 亚洲一级二级三级 | 91手机看片| 老司机午夜影院 | av日韩精品 | 亚洲国产毛片 | 成人激情综合网 | 欧美一区二区精品 | 国产精品一区二区av | 9.1成人看片免费版 国产草草影院 | 午夜精品久久久久久久 | 欧美日韩免费视频 | 91看片在线观看 | 国产农村妇女精品一二区 | 欧美一级片网站 | 亚洲日本国产 | 黑人巨大猛烈捣出白浆 | 又色又爽又黄18网站 | 欧美在线日韩 | 男女啪啪网站 | 日韩精品小视频 | 欧美日韩小视频 | 一级大片免费看 | 成人做爰69片免费 | 久久亚洲国产精品 | 久热在线 | 欧美亚洲在线 | 久久久www成人免费精品 | 伊人精品久久 | 亚洲综合视频在线观看 | 欧美国产激情 | 国产香蕉在线 | 日本免费毛片 | 欧美国产日韩一区二区 |