日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

詳解spring中aop不生效的幾種解決辦法

瀏覽:23日期:2023-08-31 15:54:31

先看下這個(gè)問題的背景:假設(shè)有一個(gè)spring應(yīng)用,開發(fā)人員希望自定義一個(gè)注解@Log,可以加到指定的方法上,實(shí)現(xiàn)自動(dòng)記錄日志(入?yún)ⅰ⒊鰠ⅰ㈨憫?yīng)耗時(shí)這些)

package com.cnblogs.yjmyzz.springbootdemo.aspect; import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public @interface Log { }

然后再寫一個(gè)Aspect來解析這個(gè)注解,對(duì)打了Log注解的方法進(jìn)行增強(qiáng)處理 

package com.cnblogs.yjmyzz.springbootdemo.aspect; import org.aspectj.lang.JoinPoint;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.Around;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Pointcut;import org.springframework.stereotype.Component; import java.lang.reflect.Method; @Component@Aspectpublic class LogAspect { @Pointcut('execution (* com.cnblogs.yjmyzz.springbootdemo.service..*.*(..))') public void logPointcut() { } @Around('logPointcut()') public void around(JoinPoint point) { String methodName = point.getSignature().getName(); Object[] args = point.getArgs(); Class<?>[] argTypes = new Class[point.getArgs().length]; for (int i = 0; i < args.length; i++) { argTypes[i] = args[i].getClass(); } Method method = null; try { method = point.getTarget().getClass().getMethod(methodName, argTypes); } catch (Exception e) { e.printStackTrace(); } //獲取方法上的注解 Log log = method.getAnnotation(Log.class); if (log != null) { //演示方法執(zhí)行前,記錄一行日志 System.out.println('before:' + methodName); } try { //執(zhí)行方法 ((ProceedingJoinPoint) point).proceed(); } catch (Throwable throwable) { throwable.printStackTrace(); } finally { if (log != null) {//演示方法執(zhí)行后,記錄一行日志System.out.println('after:' + methodName); } } }}

寫一個(gè)測(cè)試Service類:

package com.cnblogs.yjmyzz.springbootdemo.service; import com.cnblogs.yjmyzz.springbootdemo.aspect.Log;import org.springframework.stereotype.Component; @Componentpublic class HelloService { @Log public void sayHi(String msg) { System.out.println('tsayHi:' + msg); } public void anotherSayHi(String msg) { this.sayHi(msg); } }

最后來跑一把:

package com.cnblogs.yjmyzz.springbootdemo; import com.cnblogs.yjmyzz.springbootdemo.service.HelloService;import org.springframework.context.annotation.AnnotationConfigApplicationContext;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.EnableAspectJAutoProxy; /** * @author 菩提樹下的楊過 */@ComponentScan('com.cnblogs.yjmyzz')@Configuration@EnableAspectJAutoProxypublic class SampleApplication { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SampleApplication.class); HelloService helloService = context.getBean(HelloService.class); helloService.sayHi('hi-1'); System.out.println('n'); helloService.anotherSayHi('hi-2'); }}

輸出如下:

詳解spring中aop不生效的幾種解決辦法

顯然HelloService中的anotherSayHi方法,并未被aop增強(qiáng)。 原因其實(shí)很簡(jiǎn)單,了解AOP原理的同學(xué)想必都知道,AOP的實(shí)現(xiàn)有二類,如果是基于接口的,會(huì)采用動(dòng)態(tài)代理,生成一個(gè)代理類,如果是基于類的,會(huì)采用CGLib生成子類,然后在子類中擴(kuò)展父類中的方法。

詳解spring中aop不生效的幾種解決辦法

本文中HelloService并不是一個(gè)接口,所以從上圖的斷點(diǎn)中可以看出,當(dāng)Spring運(yùn)行時(shí),HelloService被增加為...EnhancerBySpringCGLib...。但是當(dāng)調(diào)用到anotherSayHi時(shí)

詳解spring中aop不生效的幾種解決辦法

方法的調(diào)用方,其實(shí)是原始的HelloSerfvice實(shí)例,即:是未經(jīng)過Spring AOP增強(qiáng)的對(duì)象實(shí)例。所以解決問題的思路就有了,想辦法用增強(qiáng)后的HelloService實(shí)例來調(diào)用!

方法一:用Autowired 注入自身的實(shí)例

詳解spring中aop不生效的幾種解決辦法

這個(gè)方法,第一眼看上去感覺有些怪,自己注入自己,感覺有點(diǎn)象遞歸/死循環(huán)的搞法,但確實(shí)可以work,Spring在解決循環(huán)依賴上有自己的處理方式,避免了死循環(huán)。

方法二:從Spring上下文獲取增強(qiáng)后的實(shí)例引用

詳解spring中aop不生效的幾種解決辦法

原理與方法一其實(shí)類似,不多解釋。

方法三: 利用AopContext

詳解spring中aop不生效的幾種解決辦法

不過這個(gè)方法要注意的是,主類入口上,必須加上exporseProxy=true,參考下圖:

詳解spring中aop不生效的幾種解決辦法

最后來驗(yàn)證下這3種方法是否生效:

詳解spring中aop不生效的幾種解決辦法

從運(yùn)行結(jié)果上看,3種方法都可以解決這個(gè)問題。 

到此這篇關(guān)于詳解spring中aop不生效的幾種解決辦法的文章就介紹到這了,更多相關(guān)spring中aop不生效內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

作者:菩提樹下的楊過出處:http://yjmyzz.cnblogs.com

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
中文字幕日韩欧美精品高清在线| 少妇精品久久久一区二区三区| 91久久亚洲| 精品资源在线| 日韩福利视频网| 亚洲三级观看| 免费日韩av| 亚洲午夜久久| 久久福利精品| 美女精品在线观看| 91亚洲精品在看在线观看高清| 国产主播一区| 天堂а√在线最新版中文在线| 日韩久久视频| 久久久久午夜电影| 欧美+亚洲+精品+三区| 国产一区成人| 日韩欧美在线精品| 国产日韩欧美| 中文不卡在线| 日韩不卡一二三区| 日韩高清一区| 日韩毛片在线| 亚洲精品成人一区| 91精品麻豆| 欧美www视频在线观看| 欧美精品高清| 亚洲免费网址| 国产欧美亚洲一区| 首页国产精品| 最新国产精品久久久| 亚洲不卡视频| 日韩电影免费在线观看| 精品中文一区| 午夜av成人| 亚洲精品一级| 日韩精品影视| 亚洲三级视频| 欧美日韩免费观看视频| 综合在线一区| 精品久久影院| 日韩福利视频网| 丝袜亚洲精品中文字幕一区| 日韩成人一级| 99热精品久久| 蜜桃av在线播放| 国产日产一区| 美女国产一区| 久久国产精品毛片| 岛国av免费在线观看| 久久九九99| 国产精品一区亚洲| 日韩精品首页| 国产精品v日韩精品v欧美精品网站 | 精品久久久久中文字幕小说| 国产综合精品一区| 国产乱子精品一区二区在线观看 | 伊人久久婷婷| 久久久人人人| 色在线视频观看| se01亚洲视频| 日韩欧美精品| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 欧美私人啪啪vps| 亚洲最新av| 9久re热视频在线精品| 免费在线小视频| 国产不卡人人| 午夜av不卡| 欧美精选一区二区三区| 久久久夜精品| 999精品在线| 亚洲综合国产| 日av在线不卡| 日韩高清国产一区在线| 欧美日本不卡高清| 国产精品久久久一区二区| 日本不卡一区二区| 欧美在线精品一区| 国产情侣久久| 成人在线丰满少妇av| 精品国产99| 日韩久久视频| 在线看片日韩| 日韩av一区二区三区四区| 在线日韩电影| 日欧美一区二区| 精品国产一区二区三区噜噜噜| 三级一区在线视频先锋| 国产精品片aa在线观看| 激情国产在线| 色综合狠狠操| 黄色日韩在线| 国产欧美一区二区精品久久久| 国产亚洲精品精品国产亚洲综合 | 美女视频网站久久| 99久久婷婷这里只有精品| 免播放器亚洲| 麻豆高清免费国产一区| 婷婷六月综合| 国产精品日本一区二区不卡视频 | 日韩极品在线观看| 久久久五月天| 麻豆成人91精品二区三区| 久久国产亚洲| 国产精品视频一区视频二区| 欧美日韩国产免费观看视频| 欧美精品三级在线| 日本韩国欧美超级黄在线观看| 亚洲精品看片| 欧洲一级精品| 美女视频一区在线观看| 国产麻豆久久| 天堂成人国产精品一区| 91麻豆国产自产在线观看亚洲| 手机精品视频在线观看| 欧美aa在线视频| 日韩高清一级| 免费看黄色91| 国产精品99一区二区| 国产精品99久久久久久董美香| 蜜桃视频第一区免费观看| 九九精品调教| 日韩av一区二区三区| 亚洲一区观看| 伊人久久大香线蕉av超碰演员| 国产精品videossex| 青青草精品视频| 亚洲激情另类| 亚洲深夜av| 日韩午夜一区| 国产亚洲午夜| 99视频在线精品国自产拍免费观看| 中文字幕色婷婷在线视频 | 亚洲精品一区三区三区在线观看| 精品国产亚洲一区二区三区在线| 久久激五月天综合精品| 免费观看日韩电影| 在线观看一区| 国产调教一区二区三区| 久久激情综合网| 天堂久久av| 日韩国产一二三区| 国产精品成人3p一区二区三区| 日韩不卡免费视频| 日本a级不卡| 久久婷婷国产| 日韩精品水蜜桃| 91久久黄色| 国产欧美日韩影院| 精品国产麻豆| 亚洲啊v在线| 亚洲欧美日韩国产| 91国内精品| 欧美激情精品| 久久九九99| 久久亚洲欧美| 六月天综合网| 国内精品亚洲| 亚洲一级淫片| 国产精品115| 亚洲欧美日韩高清在线| 日韩精品一区二区三区中文在线 | 99精品一区| 亚洲天堂免费| 国内激情久久| 日韩一区精品视频| 成人在线免费观看网站| 久久福利精品| 欧美交a欧美精品喷水| 日韩国产网站| 国产精品17p| 亚洲欧美激情诱惑| 国产第一亚洲| 最新国产精品| 99视频精品| 久久精品午夜| 中文字幕一区二区三区日韩精品 | 国产亚洲激情| 亚洲天堂av影院| 日韩在线观看一区二区三区| 亚洲成a人片| 精品三级在线| 老司机精品久久| 亚洲激情二区| 亚洲欧美一区在线| 国产精品亚洲一区二区三区在线观看| 日欧美一区二区| 在线成人直播| 久久精品欧美一区| 免费亚洲婷婷| 国产麻豆一区二区三区| 日韩有码av| 成人看片网站| 免费av一区| 在线亚洲一区| 亚洲综合婷婷| 涩涩涩久久久成人精品| 中文不卡在线| 日韩不卡手机在线v区|