欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

spring?mvc?AOP切面方法未執(zhí)行的一種情況的分析和處理過程

 更新時(shí)間:2024年05月11日 10:25:35   作者:請(qǐng)叫我大師兄_  
這篇文章主要介紹了spring?mvc?AOP切面方法未執(zhí)行的一種情況的分析和處理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

spring mvc AOP 在service里面,嵌套調(diào)用一個(gè)觸發(fā)切面方法,然而并沒有觸發(fā)切面方法執(zhí)行,但在controller里面直接調(diào)用這個(gè)方法,就可以觸發(fā)切面方法。

在springmvc里面,使用到AOP--面向切面編程,在切面做一些統(tǒng)一的事情。

遇到的情況是這樣的

1:在controller里面直接調(diào)用service里面的save方法,那么就會(huì)觸發(fā)切面的方法。

2:在controller里面調(diào)用service的其他方法,其他方法,最終會(huì)間接的調(diào)用這個(gè)save方法,這個(gè)時(shí)候,就不會(huì)觸發(fā)切面方法。

dsx

大師兄

大師兄

首先,上面的切面表達(dá)式是沒有問題的,肯定能切到對(duì)應(yīng)的方法的。

這個(gè)切面,就是去統(tǒng)一刷新一下緩存,所以,只需要在涉及到修改數(shù)據(jù)庫的時(shí)候,才需要執(zhí)行這個(gè)切面的方法。

如果,沒修改數(shù)據(jù)庫的話,就不需要去刷新緩存。就這么一個(gè)需求。

解決方法

原來的間接調(diào)用save方法,是如下樣式的。

因?yàn)檫@個(gè)save()方法就在同一個(gè)類里面所以,就可以直接調(diào)用,不嫌麻煩的,還可以在前面加個(gè)this。

這么使用的話,是不會(huì)觸發(fā)切面方法執(zhí)行的。

大師兄

修改如下:

在service類里面,使用resource注解,把自己再給引入一下,然后使用他去調(diào)用目標(biāo)方法,觸發(fā)切面方法。

大師兄

大師兄

在自己的類里面,再把自己給引入進(jìn)來,在需要觸發(fā)切面方法的時(shí)候,就是這個(gè)selfService.目標(biāo)方法(),來觸發(fā)切面去執(zhí)行切面方法。

原理

看別人說這個(gè)使用ioc注入進(jìn)來的這個(gè)service已經(jīng)變成了一個(gè)代理啦,這個(gè)AOP的實(shí)現(xiàn)就是這個(gè)代理模式來實(shí)現(xiàn)的,你要是在類里面使用this來調(diào)用方法的話,就跟這個(gè)代理沒關(guān)系啦,切面的觸發(fā),都是service的對(duì)應(yīng)代理去觸發(fā)的,所以,你在service里面直接調(diào)用觸發(fā)切面的方法,是達(dá)不到這個(gè)效果的,所以,需要使用這個(gè)ioc注入的代理對(duì)象,就會(huì)觸發(fā)切面的方法啦。

大師兄

看這個(gè)圖的執(zhí)行結(jié)果,可驗(yàn)證如下幾個(gè)結(jié)論。

1,spring使用的aop是基于cglib來實(shí)現(xiàn)的。

2,交給IOC注入到容器的bean,我們使用的那個(gè)service是代理對(duì)象,不是原始對(duì)象。

注意

你這個(gè)不是在自己的類里面把自己又注入一次么。

所以,你在使用這個(gè)selfService的時(shí)候,小心點(diǎn),避免陷入自己調(diào)用自己,然后,陷入無限循環(huán)的尷尬境地。

我想老鐵不應(yīng)該弄出這么簡(jiǎn)單的bug吧。

總結(jié)

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

相關(guān)文章

  • 取消idea雙擊shift鍵時(shí)出現(xiàn)的全局搜索的問題分析

    取消idea雙擊shift鍵時(shí)出現(xiàn)的全局搜索的問題分析

    這篇文章主要介紹了取消idea雙擊shift鍵時(shí)出現(xiàn)的全局搜索的問題分析,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-10-10
  • Spring?WebMVC初始化Controller流程詳解

    Spring?WebMVC初始化Controller流程詳解

    這篇文章主要介紹了Spring?WebMVC初始化Controller流程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java基礎(chǔ)之Stream流原理與用法詳解

    Java基礎(chǔ)之Stream流原理與用法詳解

    從Java1.8開始提出了Stream流的概念,側(cè)重對(duì)于源數(shù)據(jù)計(jì)算能力的封裝,并且支持序列與并行兩種操作方式。本文就來為大家詳細(xì)講講Stream流原理與用法
    2022-08-08
  • springboot解決使用localhost或127.0.01模擬CORS失效

    springboot解決使用localhost或127.0.01模擬CORS失效

    CORS允許不同源的網(wǎng)頁請(qǐng)求訪問另一個(gè)源服務(wù)器上的某些資源,本文主要介紹了springboot解決使用localhost或127.0.01模擬CORS失效,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • 使用easyexcel導(dǎo)出的excel文件,使用poi讀取時(shí)異常處理方案

    使用easyexcel導(dǎo)出的excel文件,使用poi讀取時(shí)異常處理方案

    這篇文章主要介紹了使用easyexcel導(dǎo)出的excel文件,使用poi讀取時(shí)異常處理方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • YGC前后新生代是否變大分析詳解

    YGC前后新生代是否變大分析詳解

    要解釋這個(gè)問題,我們先要弄清楚YGC的過程,parNew是新生代的gc算法,簡(jiǎn)單來說從gc roots開始掃描對(duì)象,當(dāng)掃到一個(gè)只要是屬于新生代的對(duì)象就將其挪到to space,但是老的對(duì)象還不會(huì)做釋放,直到gc完成之后再看是否釋放老的對(duì)象
    2022-01-01
  • mybatis實(shí)現(xiàn)獲取入?yún)⑹荓ist和Map的取值

    mybatis實(shí)現(xiàn)獲取入?yún)⑹荓ist和Map的取值

    這篇文章主要介紹了mybatis實(shí)現(xiàn)獲取入?yún)⑹荓ist和Map的取值問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • springboot中使用自定義兩級(jí)緩存的方法

    springboot中使用自定義兩級(jí)緩存的方法

    這篇文章主要介紹了springboot中使用自定義兩級(jí)緩存的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • Java分析講解序列化與字典功能的序列化

    Java分析講解序列化與字典功能的序列化

    在項(xiàng)目開發(fā)地過程中經(jīng)常會(huì)用到字典存儲(chǔ)某些可配置的值,但相應(yīng)的也會(huì)給開發(fā)帶來復(fù)雜度,比如數(shù)據(jù)庫存儲(chǔ)的值為字典值:0,1,2,3這種類型的值,但是前端頁面卻需要展示為 啟動(dòng)、禁用、刪除 等中文狀態(tài),下面我們來看兩種解決方案
    2022-06-06
  • SpringBoot使用Quartz無法注入Bean的問題及解決

    SpringBoot使用Quartz無法注入Bean的問題及解決

    這篇文章主要介紹了SpringBoot使用Quartz無法注入Bean的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11

最新評(píng)論