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

Spring Boot 3配置AspectJ LTW遇NoSuchMethodError问题求助

Spring Boot AspectJ 加载时织入(LTW)配置错误排查与修正

问题背景

在Spring Boot项目中配置AspectJ LTW,目标是拦截类路径下所有方法(包括非Spring Bean)做执行时间监控,但测试时抛出错误:java.lang.NoSuchMethodError: 'LoadTimeWeavingAspect.aspectOf()'

当前配置

1. 配置类

@Configuration
@EnableLoadTimeWeaving(aspectjWeaving = EnableLoadTimeWeaving.AspectJWeaving.ENABLED)
public class AspectJWeaverConfiguration {}

2. META-INF/aop.xml

<aspectj>
    <aspects>
        <aspect name="project.base.package.performance_monitor.LoadTimeWeavingAspect"/>
    </aspects>
    <weaver options="-verbose -showWeaveInfo">
        <include within="project.base.package..*"/>
    </weaver>
</aspectj>

3. Aspect类

@Aspect
public class LoadTimeWeavingAspect {

    @Around("within(project.base.package..*)")
    public Object around(final ProceedingJoinPoint pjp) throws Throwable {
        Method method = ((MethodSignature) pjp.getSignature()).getMethod();
        PerformanceWatcher.start(method.getDeclaringClass().getName() + "." + method.getName());
        try {
            return pjp.proceed();
        } finally {
            PerformanceWatcher.stop();
        }
    }

}

4. pom.xml依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-instrument</artifactId>
            <version>${spring-instrument.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-tracing-bridge-otel</artifactId>
            <version>${micrometer-tracing.version}</version>
        </dependency>
</dependencies>

5. Java Agent参数

-javaagent:"C:\Users\user\.m2\repository\org\springframework\spring-instrument\6.2.8\spring-instrument-6.2.8.jar"

错误原因与修正方案

核心原因

aspectOf()是AspectJ编译器为@Aspect类自动生成的单例访问方法,出现该错误说明你的Aspect类未被AspectJ编译器编译处理,导致Spring LTW无法获取Aspect实例。

具体修正步骤

  1. 添加AspectJ编译依赖与插件
    在pom.xml中补充AspectJ runtime、编译器依赖,并配置Maven插件使用AspectJ编译器处理代码:

    <dependencies>
        <!-- 新增AspectJ核心依赖 -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>1.9.22.1</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.9.22.1</version>
        </dependency>
        <!-- 保留原有依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-instrument</artifactId>
            <version>${spring-instrument.version}</version>
        </dependency>
        <!-- 其他依赖... -->
    </dependencies>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.12.1</version>
                <configuration>
                    <source>17</source> <!-- 匹配你的项目JDK版本 -->
                    <target>17</target>
                </configuration>
            </plugin>
            <!-- 配置AspectJ编译插件 -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>aspectj-maven-plugin</artifactId>
                <version>1.15.0</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>test-compile</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <source>17</source>
                    <target>17</target>
                    <complianceLevel>17</complianceLevel>
                    <aspectLibraries>
                        <aspectLibrary>
                            <groupId>org.springframework</groupId>
                            <artifactId>spring-aspects</artifactId>
                        </aspectLibrary>
                    </aspectLibraries>
                    <forceAjcCompile>true</forceAjcCompile>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.aspectj</groupId>
                        <artifactId>aspectjtools</artifactId>
                        <version>1.9.22.1</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>
    
  2. 优化LTW配置(可选)
    若不需要Spring上下文管理Aspect实例,可移除@EnableLoadTimeWeaving配置类,直接通过aop.xml和Java Agent完成纯AspectJ LTW配置,更适配非Spring Bean拦截需求。

  3. 确认Java Agent有效性

    • 确保spring-instrument.jar版本与Spring Boot版本匹配(当前版本一致无问题)
    • 测试运行时必须正确传递Java Agent参数,保证JVM启动时加载该Agent
  4. 验证编译结果
    编译后通过反编译工具查看LoadTimeWeavingAspect.class,确认是否包含aspectOf()及ajc$around$...等AspectJ生成的方法。

验证方式

启动应用时查看控制台,若aop.xml配置了-verbose -showWeaveInfo,应看到类似织入日志:

[AspectJ Weaver] info: Join point 'method-execution(xxx)' in Type 'xxx' (xxx.java:xx) advised by around advice from 'LoadTimeWeavingAspect' (LoadTimeWeavingAspect.class)

内容的提问来源于stack exchange,提问作者Daniel Gimenez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 19:20:08