最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring?AOP對嵌套方法不起作用的解決

 更新時(shí)間:2022年01月03日 11:03:56   作者:波波仔86  
這篇文章主要介紹了Spring?AOP對嵌套方法不起作用的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Spring AOP對嵌套方法不起作用

今天在調(diào)研系統(tǒng)操作記錄日志時(shí),好多教程都是借助于Spring AOP機(jī)制來實(shí)現(xiàn)。于是也采用這種方法來實(shí)現(xiàn)。在Service中的刪除日志方法上注解自定義的切點(diǎn),但是執(zhí)行沒有生效。

代碼如下:

//嘗試刪除溢出日志
? ? public synchronized void tryDelOverflowLog() {
? ? ? ? logNum++;
? ? ? ? if (logNum - LogConst.MAX_NUM > 0) {
? ? ? ? ? ? int delNum = logNum - LogConst.MAX_NUM + LogConst.EXTRA_NUM;
? ? ? ? ? ? logNum -= delNum;
? ? ? ? ? ? removeOverflowLog(delNum);
? ? ? ? }
? ? }
?
? ? //日志溢出后,刪除最新入庫的日志
? ? @ServiceLog(type = LogConst.TYPE_LOG_RECORD, description = "操作日志緩存區(qū)溢出,系統(tǒng)自動(dòng)清空緩存區(qū)")
? ? public void removeOverflowLog(int delNum) {
? ? ? ? custLogMapper.removeOverflowLog(delNum);
? ? }

在使用 Spring AOP 的時(shí)候,我們從 IOC 容器中獲取的 Service Bean 對象其實(shí)都是代理對象,而不是那些 Service Bean 對象本身,也就是說獲取的并不是被代理對象或代理目標(biāo)。當(dāng)我在自己的 Service 類中使用 this 關(guān)鍵字嵌套調(diào)用同類中的其他方法時(shí),由于 this 關(guān)鍵字引用的并不是該 Service Bean 對象的代理對象,而是其本身,故 Spring AOP 是不能攔截到這些被嵌套調(diào)用的方法的。

要解決這個(gè)問題

最簡單的方法是把自身注入到自身,用注入的這個(gè)自身去調(diào)用本方法。或者你也可以不用spring aop而是用aspectj weaving,倒是可以測底的解決該問題。我采用的是把自身注入到自身中。

? ? /**
? ? ?* 通過注入自身解決,Spring AOP嵌套調(diào)用不生效的問題
? ? ?*/
? ? @Autowired
? ? private ApplicationContext applicationContext;
? ? private LogService self;
? ? @PostConstruct
? ? private void init() {
? ? ? ? self = (LogService) applicationContext.getBean("logService");
? ? }
? ?//嘗試刪除溢出日志
? ? public synchronized void tryDelOverflowLog() {
? ? ? ? logNum++;
? ? ? ? if (logNum - LogConst.MAX_NUM > 0) {
? ? ? ? ? ? int delNum = logNum - LogConst.MAX_NUM + LogConst.EXTRA_NUM;
? ? ? ? ? ? logNum -= delNum;
? ? ? ? ? ? self.removeOverflowLog(delNum);
? ? ? ? }
? ? }

Spring AOP、嵌套調(diào)用失效及解決

加入注解

@EnableAspectJAutoProxy(proxyTargetClass = true, exposeProxy = true)

獲取當(dāng)前代理的接口

public interface ICurrentAopProxyService<T> {
? ? default T getCurrentProxyService() {
? ? ? ? return (T) AopContext.currentProxy();
? ? }
}

需要嵌套調(diào)用的Service實(shí)現(xiàn)它

在這里插入圖片描述

調(diào)用的時(shí)候改寫代碼

    public SysMerchantVersion selectByMerchantId(Long merchantId) {
        return getCurrentProxyService().getOne(new QueryWrapper<SysMerchantVersion>()
                .lambda()
                .eq(SysMerchantVersion::getMerchantId, merchantId));
    }

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • mybatis中的異常BindingException詳解

    mybatis中的異常BindingException詳解

    這篇文章主要介紹了mybatis中的異常BindingException詳解,此異常是mybatis中拋出的,意思是使用的這個(gè)方法找到,但是因?yàn)閙apperScan()已經(jīng)掃描到了Mapper類了,在綁定Mapper.xml時(shí)沒有綁定到導(dǎo)致的,需要的朋友可以參考下
    2024-01-01
  • Spring配置文件的超詳細(xì)圖文介紹

    Spring配置文件的超詳細(xì)圖文介紹

    Spring配置文件是一個(gè)或多個(gè)標(biāo)準(zhǔn)的XML文檔,下面這篇文章主要給大家介紹了關(guān)于Spring配置文件的超詳細(xì)圖文介紹,文中通過圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • 一文詳解Spring?中的順序問題

    一文詳解Spring?中的順序問題

    本文主要介紹了Spring?中的順序問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • SpringBoot 創(chuàng)建對象常見的幾種方式小結(jié)

    SpringBoot 創(chuàng)建對象常見的幾種方式小結(jié)

    Spring Boot中創(chuàng)建對象的幾種常見方式包括使用@Component、@Service、@Repository或@Controller注解,本文就來詳細(xì)的介紹一下,感興趣的可以了解一下
    2024-11-11
  • java實(shí)現(xiàn)哈夫曼壓縮的實(shí)例

    java實(shí)現(xiàn)哈夫曼壓縮的實(shí)例

    這篇文章主要介紹了java實(shí)現(xiàn)哈夫曼壓縮的實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • java生成圖片驗(yàn)證碼實(shí)例代碼

    java生成圖片驗(yàn)證碼實(shí)例代碼

    這篇文章主要介紹了java生成圖片驗(yàn)證碼實(shí)例代碼,驗(yàn)證碼的種類有很多,問題驗(yàn)證、短信驗(yàn)證還有常見的圖片驗(yàn)證,本文就為大家介紹生成圖片驗(yàn)證碼最簡單方法,感興趣的小伙伴們可以參考一下
    2016-04-04
  • spring data jpa分頁查詢示例代碼

    spring data jpa分頁查詢示例代碼

    本篇文章主要介紹了spring data jpa分頁查詢示例代碼,分頁在很多項(xiàng)目中都能使用,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-03-03
  • Java?I/O?(Input/Output)文件字節(jié)流舉例詳解

    Java?I/O?(Input/Output)文件字節(jié)流舉例詳解

    Java的輸入輸出流(IO)是用于與外部設(shè)備(如文件、網(wǎng)絡(luò)連接等)進(jìn)行數(shù)據(jù)交互的機(jī)制,下面這篇文章主要給大家介紹了關(guān)于Java?I/O?(Input/Output)文件字節(jié)流的相關(guān)資料,需要的朋友可以參考下
    2024-08-08
  • java創(chuàng)建jar包并被項(xiàng)目引用步驟詳解

    java創(chuàng)建jar包并被項(xiàng)目引用步驟詳解

    這篇文章主要介紹了java創(chuàng)建jar包并被項(xiàng)目引用步驟詳解,jar包實(shí)現(xiàn)了特定功能的,java字節(jié)碼文件的壓縮包,更多相關(guān)內(nèi)容需要的朋友可以參考一下
    2022-07-07
  • SpringSecurity中PasswordEncoder的使用

    SpringSecurity中PasswordEncoder的使用

    密碼存儲(chǔ)和加密是非常重要的,本文主要介紹了SpringSecurity中PasswordEncoder的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01

最新評論

三穗县| 阜宁县| 城市| 独山县| 夏邑县| 宁化县| 长垣县| 德庆县| 仁化县| 平果县| 阳高县| 泗洪县| 黎城县| 柏乡县| 金平| 葫芦岛市| 横峰县| 尚义县| 尼木县| 福贡县| 博罗县| 垣曲县| 三江| 建水县| 茶陵县| 伊春市| 玉树县| 思茅市| 颍上县| 遵义县| 余姚市| 达孜县| 漳浦县| 安龙县| 宁国市| 临洮县| 合山市| 桃园县| 南安市| 营山县| 深水埗区|