You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AOP未触发自定义TrackExecutionTime注解问题求助

问题解决:AOP切面未触发自定义注解TrackExecutionTime

核心原因

Spring AOP仅作用于Spring容器管理的Bean,你的测试类ExecutionTimeTrackerTest未被Spring容器接管,且测试未加载Spring上下文,导致切面无法拦截方法调用。IDEA提示“advice advises no method”是因为编译器找不到被注解的Spring Bean方法。

解决步骤

1. 让测试类纳入Spring容器管理并加载测试上下文

修改测试类,添加Spring Boot测试相关注解,确保Spring容器能加载切面和测试Bean:

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import static org.junit.jupiter.api.Assertions.assertEquals;

// 标记为Spring组件,让容器管理
@Component
// 启用Spring Boot测试上下文
@SpringBootTest
public class ExecutionTimeTrackerTest {

    @Test
    @TrackExecutionTime
    public void someMethod(){
        int[] randomNumbers = {582, 15, 596, 827, 779, 426, 153, 557, 394, 12};
        Arrays.sort(randomNumbers);
        int index = Arrays.binarySearch(randomNumbers, 827);
        assertEquals(9, index);
    }
}

2. 确保切面的注解表达式精准(可选)

如果TrackExecutionTime注解和切面不在同一包,建议在@Around中使用全类名,避免包名冲突:

// 替换com.yourpackage为注解实际的包路径
@Around(value = "@annotation(com.yourpackage.TrackExecutionTime)")

3. 检查切面的条件加载注解

确认配置文件中aspect.enabled的值为true,或者直接移除@ConditionalOnExpression("${aspect.enabled:true}")(若无需开关控制),防止切面因条件不满足未被加载。

4. 确认依赖完整性

如果是Maven项目,确保pom.xml已引入Spring AOP和测试依赖:

<dependencies>
    <!-- Spring AOP依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>
    <!-- Spring Boot测试依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

验证

运行测试类,查看日志输出,若成功触发切面,会看到类似如下日志:

INFO  com.example.ExecutionTimeTrackerTest.someMethod >> Took : X mills

内容的提问来源于stack exchange,提问作者Basuki Nath Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 21:42:50