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

Springboot配置AOP的注解切點失效解決方案

 更新時間:2026年06月04日 11:01:02   作者:sheclockes  
本文探討了在Spring框架中使用AOP攔截靜態(tài)方法調(diào)用的實現(xiàn)細節(jié),重點在于ApplicationContext和ApplicationContextAware接口的使用差異,通過對比兩種獲取Bean的方式,最終解決了切點無法被攔截的問題

問題描述

在靜態(tài)方法中調(diào)用本類的另一個靜態(tài)方法,需要在AOP中攔截該方法實現(xiàn)一部分業(yè)務(wù)邏輯,在aop類中添加了@Aspect@Component@EnableAspectJAutoProxy三個注解,切點通知方式為@Around,但是切點一直無法被攔截。

問題發(fā)現(xiàn)

當前類的實例是通過applicaitoncontext.getBean(類名.class)獲取的,所以一直無法在切點無法被攔截(代碼中的第一種方式)。

修改為實現(xiàn)了ApplicationContextAware接口的getBean(類名.class)(代碼中的第二種方式),就可以正常被攔截了。

applicaitoncontext和ApplicationContextAware的getBaen()方法的異同點查詢文檔可知:

當一個類實現(xiàn)了這個接口(ApplicationContextAware)之后,這個類就可以方便獲得ApplicationContext中的所有bean。

換句話說:

就是這個類可以直接獲取spring配置文件中,所有有引用到的bean對象。

@Component
public class ApplicationContextUtils implements ApplicationContextAware {
private static ApplicationContext applicationContext;
public static <T> T getBean(Class<T> tClass){
return applicationContext.getBean(tClass);
    }
public static <T> T getBean(String name , Class<T> tClass){
return applicationContext.getBean(name,tClass);
    }
@Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
ApplicationContextUtils.applicationContext = applicationContext;
    }
}
@Component
public class SendSmm {
private static SendSmm sendSmm=null;
public static void test1(){
if(null == sendSmm){
sendSmm = Const.applicationContext.getBean(SendSmm.class);//第一種
            sendSmm = ApplicationContextUtils.getBean(SendSmm.class);//第二種
        }
sendSmm.test2();
    }
public void test2(){
    }
}
public class Const {
public static ApplicationContext applicationContext = null ;
}
@Aspect
@Component
@EnableAspectJAutoProxy
public class TestAopUtils {
@Pointcut("execution( public * com.example.demo.service.*(..))")
public void testAop(){}
@Around("testAop()")
public Object Around (ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
Object object = null;
Object[] args = proceedingJoinPoint.getArgs();//獲取切點的請求參數(shù)
        String st = (String) args[0];//第一個參數(shù)
        proceedingJoinPoint.proceed();//調(diào)用原方法
        return object ;
    }
}

總結(jié)

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

相關(guān)文章

最新評論

邵阳市| 北京市| 虞城县| 扎赉特旗| 玉屏| 万全县| 钟祥市| 武陟县| 同江市| 收藏| 左贡县| 西城区| 西林县| 广安市| 胶南市| 井陉县| 海口市| 明溪县| 都匀市| 定兴县| 武宁县| 临高县| 陇西县| 四会市| 雷州市| 龙山县| 万宁市| 淅川县| 商丘市| 武义县| 绥中县| 屏山县| 淮南市| 蓝田县| 和硕县| 锡林浩特市| 阳春市| 沛县| 昌图县| 平南县| 兴国县|