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

SpringAop如何通過某個子類切父類

 更新時間:2021年11月24日 14:40:02   作者:zxx3536  
這篇文章主要介紹了SpringAop如何通過某個子類切父類,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

SpringAop通過某個子類切父類

偽代碼如下

package com.zjy;
public abstract class A{
 public void a(){
  system.out.printlin("【a】方法被調(diào)用");
 }
}
package com.zjy;
public class B extends A{
 public void b(){
  system.out.printlin("【b】方法被調(diào)用");
 }
}
package com.zjy;
public class C extends A{
 public void c(){
  system.out.printlin("【c】方法被調(diào)用");
 }
}
package com.zjy;
public class D extends A{
 public void d(){d
  system.out.printlin("【d】方法被調(diào)用");
 }
}

要求如下,我們想要在代碼通過B類使用a方法時候進行切面增強,通過其他類進行使用時,都不進行增強

within 和 execution的精確到類均不能對父類方法進行增強

正確方法1

 @Before("execution(* com.zjy.*.*(..))")
    public void dealOtherServicePointcut(JoinPoint joinPoint) {
        Object aThis = joinPoint.getThis();
        if((aThis instanceof B )){
            String name = joinPoint.getSignature().getName();
            log.info("進入前置方法****************************************************["+name+"]");
        }
    }

方法1是使用com.zjy包下的所有子類進行篩選,將類進行模糊匹配

正確方法2

 @Before("execution(* com.zjy..*.*(..))")
    public void dealOtherServicePointcut(JoinPoint joinPoint) {
        Object aThis = joinPoint.getThis();
        if((aThis instanceof B )){
            String name = joinPoint.getSignature().getName();
            log.info("進入前置方法****************************************************["+name+"]");
        }
    }

方法2是使用com.zjy包下的所有類以及下級包下的類,進行篩選,將類進行模糊匹配。

注意:

1.要使用instanceof關(guān)鍵字進行類的過濾,否則其他類也會進行增強。

2.無需考慮在增強時類需要多次代理,因為在AOP增強時只會生成一個代理類,并且大多數(shù)的類都會有代理類的生成,所以無需考慮(將沒必要的類也進行了代理,后續(xù)需要使用instanceof進行判斷對性能的降低)。

3.within 和 execution的精確到類均不能對父類方法進行增強

SpringAOP會忽略從父類繼承的方法

在項目中,我想攔截所有的dao類,結(jié)構(gòu)如下:

dao
?? ---| generic
??????????? ---| GenericDao
?? ---| GoodsDao
?? ---| SupermarketDao
?? ---| UserDao

下面的三個dao 繼承自 統(tǒng)一的父類(GenericDao),在beans.xml中,我只攔截了下面的三個子類,beans.xml中的部分代碼如下:

<aop:aspect id="myAspect" ref="loggerAop">
   <aop:pointcut id="daoPointcut" expression="execution(* com.shop.jn.dao.*.*(..))" />
   <aop:around pointcut-ref="daoPointcut" method="around" />
  </aop:aspect>

結(jié)果從GenericDao 中繼承下來的方法都沒有被aop 攔截到。

如何解決這個問題呢?

讓切面也匹配父類(同時匹配父類和子類),修改如下:

<aop:aspect id="myAspect" ref="loggerAop">
           <aop:pointcut id="daoPointcut" expression="execution(* com.shop.jn.dao..*.*(..))" />
           <aop:around pointcut-ref="daoPointcut" method="around" />
       </aop:aspect>

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

相關(guān)文章

  • 使用Java和ffmpeg把音頻和視頻合成視頻的操作方法

    使用Java和ffmpeg把音頻和視頻合成視頻的操作方法

    這篇文章主要介紹了使用Java和ffmpeg把音頻和視頻合成視頻,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的工作或?qū)W習(xí)具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • AbstractQueuedSynchronizer內(nèi)部類Node使用講解

    AbstractQueuedSynchronizer內(nèi)部類Node使用講解

    這篇文章主要為大家介紹了AbstractQueuedSynchronizer內(nèi)部類Node使用講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • Java Servlet輸出中文亂碼問題解決方案

    Java Servlet輸出中文亂碼問題解決方案

    這篇文章主要介紹了Java Servlet輸出中文亂碼問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • 關(guān)于JAVA8的 Stream學(xué)習(xí)

    關(guān)于JAVA8的 Stream學(xué)習(xí)

    這篇文章主要介紹了JAVA8 Stream學(xué)習(xí)方法的相關(guān)資料,需要的朋友可以參考下面文章內(nèi)容
    2021-09-09
  • SpringBoot中的Future接口詳解

    SpringBoot中的Future接口詳解

    這篇文章主要介紹了SpringBoot中的Future接口詳解,在異步編程中,我們通常需要處理一些耗時的操作,一種常見的做法是使用 Future 接口來代表一個異步操作的結(jié)果,需要的朋友可以參考下
    2023-07-07
  • tomcat部署java web項目遇到的問題及解決方法

    tomcat部署java web項目遇到的問題及解決方法

    這篇文章主要介紹了tomcat部署java web項目遇到的問題及解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • Java和Android崩潰捕獲機制

    Java和Android崩潰捕獲機制

    這篇文章主要為大家介紹了Java和Android崩潰捕獲機制詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • 緩存工具類ACache使用方法詳解

    緩存工具類ACache使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了緩存工具類ACache的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 簡單說明Java的Struts框架中merge標(biāo)簽的使用方法

    簡單說明Java的Struts框架中merge標(biāo)簽的使用方法

    這篇文章主要簡單介紹了Java的Struts框架中merge標(biāo)簽的使用方法,Struts是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2015-12-12
  • Java之int和string類型轉(zhuǎn)換詳解

    Java之int和string類型轉(zhuǎn)換詳解

    這篇文章主要介紹了Java之int和string類型轉(zhuǎn)換詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08

最新評論