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

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方法時候進(jìn)行切面增強(qiáng),通過其他類進(jìn)行使用時,都不進(jìn)行增強(qiáng)

within 和 execution的精確到類均不能對父類方法進(jìn)行增強(qiáng)

正確方法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("進(jìn)入前置方法****************************************************["+name+"]");
        }
    }

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

正確方法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("進(jìn)入前置方法****************************************************["+name+"]");
        }
    }

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

注意:

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

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

3.within 和 execution的精確到類均不能對父類方法進(jìn)行增強(qiáng)

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)文章

  • 一次線上websocket返回400問題排查的實戰(zhàn)記錄

    一次線上websocket返回400問題排查的實戰(zhàn)記錄

    最近項目中有端對端通信場景,實時性要求較高,考慮后選用了websocket 這一通信協(xié)議,下面這篇文章主要給大家介紹了一次線上websocket返回400問題排查的實戰(zhàn)記錄,需要的朋友可以參考下
    2022-04-04
  • Spring Cloud Stream整合RocketMQ的搭建方法

    Spring Cloud Stream整合RocketMQ的搭建方法

    本文介紹了如何使用SpringCloudStream整合RocketMQ進(jìn)行消息傳遞,SpringCloudStream是一個用于構(gòu)建與共享消息系統(tǒng)連接的框架,支持持久pub/sub語義和消費者組,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • Spring Security實現(xiàn)基于角色的訪問控制框架

    Spring Security實現(xiàn)基于角色的訪問控制框架

    Spring Security是一個功能強(qiáng)大的安全框架,提供了基于角色的訪問控制、身份驗證、授權(quán)等安全功能,可輕松保護(hù)Web應(yīng)用程序的安全,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-04-04
  • elasticsearch的靈魂唯一master選舉機(jī)制原理分析

    elasticsearch的靈魂唯一master選舉機(jī)制原理分析

    這篇文章主要為大家介紹了elasticsearch的靈魂唯一master選舉機(jī)制原理分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • IDEA版最新MyBatis程序配置教程詳解

    IDEA版最新MyBatis程序配置教程詳解

    這篇文章主要介紹了IDEA版最新MyBatis程序配置教程詳解,需要的朋友可以參考下
    2020-07-07
  • swagger中如何給請求添加header

    swagger中如何給請求添加header

    這篇文章主要介紹了swagger中如何給請求添加header,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 詳解SpringBoot簡化配置分析總結(jié)

    詳解SpringBoot簡化配置分析總結(jié)

    這篇文章主要介紹了詳解SpringBoot簡化配置分析總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Java如何在Map中存放重復(fù)key

    Java如何在Map中存放重復(fù)key

    這篇文章主要介紹了Java如何在Map中存放重復(fù)key,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • java線程本地變量ThreadLocal詳解

    java線程本地變量ThreadLocal詳解

    ThreadLocal則為每一個線程提供了一個變量副本,從而隔離了多個線程訪問數(shù)據(jù)的沖突,ThreadLocal提供了線程安全的對象封裝,下面我們就來詳細(xì)了解一下吧
    2019-06-06
  • Java中Collections.sort的使用

    Java中Collections.sort的使用

    本文主要介紹了Java中Collections.sort的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05

最新評論

高清| 北票市| 万源市| 封丘县| 浏阳市| 金寨县| 榆社县| 雅安市| 阿拉善左旗| 海南省| 蒙阴县| 密山市| 大理市| 庄河市| 防城港市| 宜黄县| 三河市| 景宁| 雅安市| 巩留县| 闻喜县| 兴海县| 五华县| 德江县| 弥勒县| 上蔡县| 北宁市| 宜宾县| 陈巴尔虎旗| 泸水县| 车致| 泰顺县| 泉州市| 巴中市| 林州市| 嘉黎县| 西吉县| 商都县| 高唐县| 呼和浩特市| 宜川县|