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

解決spring項目找不到Aspect依賴注解的問題

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

spring項目找不到Aspect依賴注解

昨天寫一個項目的時候在使用Aspect時一直找不到依賴,alt+enter自動添加Maven依賴還是解決不了問題。

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

在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注解不起作用的問題

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

我AOP類已經(jīng)搞好了之后,項目運行起來,調(diào)用前后不會在控制臺打印。

我的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—————————————————");
    }
    //在每個日志橫切面之后執(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);
    }
}

我的項目樹結(jié)構(gòu)是這樣的

在這里插入圖片描述

但是運行起來也沒報錯。

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

在這里插入圖片描述

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

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

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

2、檢查啟動類中是否有這兩個注解

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

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

4、檢查AOP版本是否過老。

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

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

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

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

它說名稱不匹配?也就是說我的AOP類在項目運行時是被調(diào)用加載了的,這讓我放心了,我一開始以為此類未參與項目運行。

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

發(fā)現(xiàn),有的人在寫成execution(* com.wz.blog.*.*(..))是沒有任何錯誤的,說明很可能不是AOP語法的問題。

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

此前我使用IDEA正式版2020.1.1, 項目運行時AOP類就是不生效,而當我使用社區(qū)版運行時——

在這里插入圖片描述

好吧,運行成功了。

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

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

代碼如下:

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

沒錯,和一開始需要改動的地方,只有一個微小的地方不一樣。(不是注釋)把

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

改成

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

一個“.”的差別。

好吧,困擾大半天的謎團就此解開。

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

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

相關(guān)文章

  • SpringCloud Zuul的使用簡介

    SpringCloud Zuul的使用簡介

    這篇文章主要介紹了SpringCloud Zuul的使用簡介,幫助大家更好的理解和學(xué)習(xí)使用Spring Cloud,感興趣的朋友可以了解下
    2021-04-04
  • 解決RestTemplate 請求接收自定義400+ 或500+錯誤

    解決RestTemplate 請求接收自定義400+ 或500+錯誤

    這篇文章主要介紹了解決RestTemplate 請求接收自定義400+ 或500+錯誤,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • java基于嵌入式Tomcat的War包啟動器

    java基于嵌入式Tomcat的War包啟動器

    本文主要介紹了java基于嵌入式Tomcat的War包啟動器,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • java 刪除數(shù)組元素與刪除重復(fù)數(shù)組元素的代碼

    java 刪除數(shù)組元素與刪除重復(fù)數(shù)組元素的代碼

    在java中刪除數(shù)組元素與過濾重復(fù)數(shù)組元素我們都會需要去遍歷數(shù)組然后根據(jù)我們設(shè)置的值或方法進行去除數(shù)組
    2013-10-10
  • mybatis實現(xiàn)增刪改查_動力節(jié)點Java學(xué)院整理

    mybatis實現(xiàn)增刪改查_動力節(jié)點Java學(xué)院整理

    本文通過實例代碼給大家介紹了mybatis實現(xiàn)增刪改查功能,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-09-09
  • SpringBoot實現(xiàn)HTTP服務(wù)監(jiān)聽的代碼示例

    SpringBoot實現(xiàn)HTTP服務(wù)監(jiān)聽的代碼示例

    前后端分離項目中,在調(diào)用接口調(diào)試時候,我們可以通過cpolar內(nèi)網(wǎng)穿透將本地服務(wù)端接口模擬公共網(wǎng)絡(luò)環(huán)境遠程調(diào)用調(diào)試,本次教程我們以Java服務(wù)端接口為例,需要的朋友可以參考下
    2023-05-05
  • springboot讀取配置文件中的參數(shù)具體步驟

    springboot讀取配置文件中的參數(shù)具體步驟

    在本篇文章里小編給大家分享了關(guān)于springboot讀取配置文件中的參數(shù)的相關(guān)知識點內(nèi)容,有需要的朋友們跟著學(xué)習(xí)下。
    2019-06-06
  • java?MongoDB實現(xiàn)列表分頁查詢的示例代碼

    java?MongoDB實現(xiàn)列表分頁查詢的示例代碼

    本文主要介紹了java?MongoDB實現(xiàn)列表分頁查詢的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • 使用自定義注解和@Aspect實現(xiàn)責(zé)任鏈模式的組件增強的詳細代碼

    使用自定義注解和@Aspect實現(xiàn)責(zé)任鏈模式的組件增強的詳細代碼

    責(zé)任鏈模式是一種行為設(shè)計模式,其作用是將請求的發(fā)送者和接收者解耦,從而可以靈活地組織和處理請求,本文講給大家介紹如何使用自定義注解和@Aspect實現(xiàn)責(zé)任鏈模式的組件增強,文中有詳細的代碼示例供大家參考,感興趣的同學(xué)可以借鑒一下
    2023-05-05
  • Java中四種線程池的使用示例詳解

    Java中四種線程池的使用示例詳解

    這篇文章主要給大家介紹了關(guān)于Java中四種線程池的使用方法,四種線程池分別包括FixedThreadPool、CachedThreadPool、ScheduledThreadPool以及SingleThreadExecutor,文中給出了詳細的示例代碼供大家參考,需要的朋友們下面來一起看看吧。
    2017-08-08

最新評論