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

解決spring項(xiàng)目找不到Aspect依賴注解的問(wèn)題

 更新時(shí)間:2021年06月17日 09:51:02   作者:周水清  
這篇文章主要介紹了解決spring項(xiàng)目找不到Aspect依賴注解的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

spring項(xiàng)目找不到Aspect依賴注解

昨天寫(xiě)一個(gè)項(xiàng)目的時(shí)候在使用Aspect時(shí)一直找不到依賴,alt+enter自動(dòng)添加Maven依賴還是解決不了問(wèn)題。

在這里記錄下,希望能對(duì)大家有幫助。

在pom.xml中添加一下依賴:

 <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
            <scope>test</scope>
        </dependency>

添加如上依賴,等待安裝之后,@Aspect注解就能正常使用了。

【特殊情況】

SpringBoot @Aspect注解不起作用的問(wèn)題

搭建項(xiàng)目使用SpringBoot的AOP時(shí)候,發(fā)現(xiàn)一個(gè)問(wèn)題。

我AOP類已經(jīng)搞好了之后,項(xiàng)目運(yùn)行起來(lái),調(diào)用前后不會(huì)在控制臺(tái)打印。

我的AOP類是這樣的:

@Component
@Aspect
public class LogAspect {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());
//  @Pointcut("execution(* com.wz.blog.*.*(..))")指定攔截com.wz.blog包下所有類的所有方法
    @Pointcut("execution(* com.wz.blog.*.*(..))")
    public void log() {}
    @Before(value = "log()")
    public void doBefore(){
        System.out.println("方法執(zhí)行前。");
        logger.info("—————————————————doBefore—————————————————");
    }
    //在每個(gè)日志橫切面之后執(zhí)行
    @After(value = "log()")
    public void doAfter(){
        System.out.println("方法執(zhí)行后。");
        logger.info("—————————————————doAfter—————————————————");
    }
    @AfterReturning(returning = "result",pointcut = "log()")
    public void doAfterReturn(Object result){
        logger.info("Result : {}" + result);
    }
}

我的項(xiàng)目樹(shù)結(jié)構(gòu)是這樣的

在這里插入圖片描述

但是運(yùn)行起來(lái)也沒(méi)報(bào)錯(cuò)。

我是出現(xiàn)了這樣的情況:

在這里插入圖片描述

如上圖,在index前后應(yīng)該有INFO輸出和控制臺(tái)打印的,然而我并沒(méi)有。

針對(duì)以上問(wèn)題網(wǎng)上有多種解決方案: (而我的解決方案仍不在其中。)

1、檢查pom.xml類中是否依賴。

2、檢查啟動(dòng)類中是否有這兩個(gè)注解

@ComponentScan("com.wz.blog.*")
@EnableAspectJAutoProxy(proxyTargetClass = true)

3、檢查AOP類中除了@Aspect注解還應(yīng)該有@Component注解。(這里@Component用于開(kāi)啟組件掃描,使得SpringBoot可以找到它。即交由SpringBoot管理。)

4、檢查AOP版本是否過(guò)老。

5、檢查AOP類是否和啟動(dòng)類在同一等級(jí)。如果不在,應(yīng)該使用2的方法進(jìn)行指定。(這個(gè)方法和2有點(diǎn)重復(fù))

好吧以上就是我搜羅的各種大牛提供的解決方法,無(wú)疑這些都是讓人欲罷不能的干貨。然而并沒(méi)有解決我的問(wèn)題。

在多個(gè)小時(shí)的反復(fù)測(cè)試之后,發(fā)現(xiàn)一個(gè)突破口:當(dāng)我把AOP類中 @Pointcut("execution(* com.wz.blog.*.*(..))")的亂寫(xiě)成 @Pointcut("execution(* com.xxx.xxx.*.*(..))")時(shí)候,報(bào)錯(cuò)了,報(bào)錯(cuò)信息如下:

warning no match for this type name:com.xxx.xxx [Xlint:invalidAbsoluteTypeName]

它說(shuō)名稱不匹配?也就是說(shuō)我的AOP類在項(xiàng)目運(yùn)行時(shí)是被調(diào)用加載了的,這讓我放心了,我一開(kāi)始以為此類未參與項(xiàng)目運(yùn)行。

那么我接著思考,有沒(méi)有可能是AOP語(yǔ)法出錯(cuò)?導(dǎo)致我一開(kāi)始指定的包壓根沒(méi)找到,或者說(shuō)來(lái)沒(méi)來(lái)得及找到?于是我在網(wǎng)上搜索了報(bào)錯(cuò)warning no match for this type name:com.xxx.xxx [Xlint:invalidAbsoluteTypeName]的原因。

發(fā)現(xiàn),有的人在寫(xiě)成execution(* com.wz.blog.*.*(..))是沒(méi)有任何錯(cuò)誤的,說(shuō)明很可能不是AOP語(yǔ)法的問(wèn)題。

最終我發(fā)現(xiàn),在IDEA不同的版本上運(yùn)行,結(jié)果各不相同。

此前我使用IDEA正式版2020.1.1, 項(xiàng)目運(yùn)行時(shí)AOP類就是不生效,而當(dāng)我使用社區(qū)版運(yùn)行時(shí)——

在這里插入圖片描述

好吧,運(yùn)行成功了。

但是我們不能一直使用社區(qū)版。

然后,就讓我找到了IDEA正式版的解決方案。

代碼如下:

@Component
@Aspect
public class LogAspect {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());
    @Pointcut("execution(* com.wz.blog.*..*(..))")
    public void log() {}
    //在每個(gè)日志橫切面之前執(zhí)行
    @Before(value = "log()")
    public void doBefore(){
        System.out.println("方法執(zhí)行前。");
        logger.info("—————————————————doBefore—————————————————");
    }
    //在每個(gè)日志橫切面之后執(zhí)行
    @After(value = "log()")
    public void doAfter(){
        System.out.println("方法執(zhí)行后。");
        logger.info("—————————————————doAfter—————————————————");
    }
//    returning = "result"實(shí)現(xiàn)通過(guò)參數(shù)result捕獲以上攔截方法的返回內(nèi)容,pointcut = "log()"是取得切面
    @AfterReturning(returning = "result",pointcut = "log()")
    public void doAfterReturn(Object result){
        logger.info("Result : {}" + result);
    }
}

沒(méi)錯(cuò),和一開(kāi)始需要改動(dòng)的地方,只有一個(gè)微小的地方不一樣。(不是注釋)把

@Pointcut("execution(* com.wz.blog.*.*(..))")

改成

@Pointcut("execution(* com.wz.blog.*..*(..))")

一個(gè)“.”的差別。

好吧,困擾大半天的謎團(tuán)就此解開(kāi)。

最后的最后,極度懷疑這個(gè)問(wèn)題是IDEA2020.1.1的版本坑導(dǎo)致。

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

相關(guān)文章

  • Java實(shí)現(xiàn)微信公眾號(hào)自定義菜單的創(chuàng)建方法示例

    Java實(shí)現(xiàn)微信公眾號(hào)自定義菜單的創(chuàng)建方法示例

    這篇文章主要介紹了Java實(shí)現(xiàn)微信公眾號(hào)自定義菜單的創(chuàng)建方法,結(jié)合實(shí)例形式分析了java創(chuàng)建微信公眾號(hào)自定義菜單的具體步驟、實(shí)現(xiàn)方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-10-10
  • Java?int類型如何獲取高低位

    Java?int類型如何獲取高低位

    這篇文章主要介紹了Java?int類型如何獲取高低位,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • SpringBoot在接收參數(shù)的七種方式詳解

    SpringBoot在接收參數(shù)的七種方式詳解

    這篇文章主要介紹了SpringBoot在接收參數(shù)的七種方式詳解,隨著前后端的分離,接口方式開(kāi)發(fā)成為普遍的開(kāi)發(fā)形式,前端相對(duì)于后端來(lái)說(shuō),常用的接口傳參方式就一定要了解和熟悉,下面?我們梳理了常用的七種?Controller層接受參數(shù)的方式,需要的朋友可以參考下
    2023-10-10
  • 解析Spring Boot 如何讓你的 bean 在其他 bean 之前完成加載

    解析Spring Boot 如何讓你的 bean 在其他 bean&n

    在 SpringBoot 中如何讓自己的某個(gè)指定的 Bean 在其他 Bean 前完成被 Spring 加載?我聽(tīng)到這個(gè)問(wèn)題的第一反應(yīng)是,為什么會(huì)有這樣奇怪的需求?下面小編給大家分析下Spring Boot 如何讓你的 bean 在其他 bean 之前完成加載 ,感興趣的朋友一起看看吧
    2024-01-01
  • springboot解決使用localhost或127.0.01模擬CORS失效

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

    CORS允許不同源的網(wǎng)頁(yè)請(qǐng)求訪問(wèn)另一個(gè)源服務(wù)器上的某些資源,本文主要介紹了springboot解決使用localhost或127.0.01模擬CORS失效,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • Java組件開(kāi)發(fā)之文件壓縮與解壓詳解

    Java組件開(kāi)發(fā)之文件壓縮與解壓詳解

    這篇文章主要為大家詳細(xì)介紹了如何使用Java開(kāi)發(fā)一個(gè)文件壓縮與解壓組件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-10-10
  • android中GridView的用法示例

    android中GridView的用法示例

    這篇文章主要介紹了android中GridView的用法,對(duì)于Android初學(xué)者很有參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2014-08-08
  • springMVC中的view視圖詳細(xì)解析

    springMVC中的view視圖詳細(xì)解析

    這篇文章主要介紹了springMVC中的view視圖,springMVC視圖的種類很多,默認(rèn)有轉(zhuǎn)發(fā)視圖和重定向視圖,本文就每一種視圖給大家詳細(xì)介紹,需要的朋友可以參考下
    2022-03-03
  • Java中SynchronousQueue的底層實(shí)現(xiàn)原理剖析

    Java中SynchronousQueue的底層實(shí)現(xiàn)原理剖析

    BlockingQueue的實(shí)現(xiàn)類中,有一種阻塞隊(duì)列比較特殊,就是SynchronousQueue(同步移交隊(duì)列),隊(duì)列長(zhǎng)度為0。本文就來(lái)剖析一下SynchronousQueue的底層實(shí)現(xiàn)原理,感興趣的可以了解一下
    2022-11-11
  • Java?pdf文件書(shū)簽承前縮放驗(yàn)證的設(shè)置方法

    Java?pdf文件書(shū)簽承前縮放驗(yàn)證的設(shè)置方法

    很多朋友不知道是什么是書(shū)簽承前縮放,簡(jiǎn)單說(shuō)就是可以任意改變當(dāng)前pdf文檔縮放比例,點(diǎn)擊書(shū)簽后不影響其縮放比率,本文給大家介紹下Java?pdf文件書(shū)簽承前縮放驗(yàn)證的設(shè)置方法,感興趣的朋友一起看看吧
    2022-02-02

最新評(píng)論

神木县| 平湖市| 阜阳市| 兴国县| 红河县| 临泉县| 沅陵县| 江口县| 新竹县| 深水埗区| 瑞安市| 剑川县| 青川县| 类乌齐县| 新兴县| 凤山县| 天津市| 台中市| 大安市| 时尚| 广昌县| 基隆市| 布拖县| 楚雄市| 泸州市| 秭归县| 海原县| 太原市| 邓州市| 琼海市| 古丈县| 郯城县| 福泉市| 饶阳县| 察雅县| 奉贤区| 广平县| 温泉县| 聂荣县| 阜新市| 拜泉县|