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

Springboot配置AOP的注解切點(diǎn)失效解決方案

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

問(wèn)題描述

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

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

當(dāng)前類(lèi)的實(shí)例是通過(guò)applicaitoncontext.getBean(類(lèi)名.class)獲取的,所以一直無(wú)法在切點(diǎn)無(wú)法被攔截(代碼中的第一種方式)。

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

applicaitoncontext和ApplicationContextAware的getBaen()方法的異同點(diǎn)查詢(xún)文檔可知:

當(dāng)一個(gè)類(lèi)實(shí)現(xiàn)了這個(gè)接口(ApplicationContextAware)之后,這個(gè)類(lèi)就可以方便獲得ApplicationContext中的所有bean。

換句話說(shuō):

就是這個(gè)類(lèi)可以直接獲取spring配置文件中,所有有引用到的bean對(duì)象。

@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();//獲取切點(diǎn)的請(qǐng)求參數(shù)
        String st = (String) args[0];//第一個(gè)參數(shù)
        proceedingJoinPoint.proceed();//調(diào)用原方法
        return object ;
    }
}

總結(jié)

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

相關(guān)文章

最新評(píng)論

东丽区| 钟山县| 富民县| 林口县| 富阳市| 桃园县| 沾益县| 凤阳县| 公安县| 巴林右旗| 额济纳旗| 浠水县| 琼结县| 犍为县| 汤原县| 漳州市| 宜州市| 晴隆县| 九寨沟县| 双城市| 莒南县| 四子王旗| 榆树市| 玉龙| 呼图壁县| 锦州市| 澄江县| 长沙市| 沙坪坝区| 香河县| 罗田县| 乌兰浩特市| 宜都市| 兴宁市| 铜鼓县| 景洪市| 新龙县| 平安县| 抚宁县| 神木县| 黑水县|