Spring Boot配置AspectJ加载时织入(LTW)后出现nonReweavableTypeEncountered警告的问题求助
Spring Boot配置AspectJ加载时织入(LTW)后出现nonReweavableTypeEncountered警告的问题求助
我在Spring Boot应用里配置了AspectJ加载时织入(LTW),功能本身都能正常工作,但日志里总是定期弹出下面这个错误:
[LaunchedClassLoader@4bb4de6a] error at com/xyz/tool/service/MyClass.java::0 class com.xyz.MyClass is already woven and has not been built in reweavable mode [Xlint:nonReweavableTypeEncountered]
这让我特别困惑——我完全搞不懂为什么会触发重复织入,按道理一个类应该只被织入一次才对。有没有大佬能给点排查思路?
更新:最小复现示例
我整理了一个能复现问题的最小示例,先贴出切面类的代码:
@Aspect public class ExecTimeMonitor { @Around("execution(* com.xyz.tool.controller.MainController.performOperation(..))") public Object wrapMainMethod(ProceedingJoinPoint joinPoint) throws Throwable { // ... 省略其他逻辑 long start = getNow(); ResponseEntity<OperationResultDto> resEntity = (ResponseEntity<OperationResultDto>) joinPoint.proceed(); long execTime = getNow() - start; // ... 省略其他逻辑 return resEntity; } @Around("execution(static * com.xyz.swig.Kernel.*(..)) || execution(public * com.xyz.tool.service.*.*(..)) ") public Object wrapInnerMethod(ProceedingJoinPoint joinPoint) throws Throwable { // ... 省略其他逻辑 long start = getNow(); Object result = joinPoint.proceed(); long execTime = getNow() - start; // ... 省略其他逻辑 return result; } }
然后是aop.xml的配置:
<aspectj> <weaver> <include within="com.xyz..*"/> </weaver> <aspects> <aspect name="com.xyz.tool.profiling.ExecTimeMonitor"/> </aspects> </aspectj>
LTW的启用是通过下面的Spring配置类实现的:
@EnableAspectJAutoProxy @EnableLoadTimeWeaving @Configuration public class AopConfig { }
我的JVM启动参数是按照@kriegaex的建议配置的两个agent:
java -javaagent:aspectjweaver-1.9.24.jar -javaagent:spring-instrument-6.1.21.jar -jar app.jar
确实,这是目前唯一能让我的Spring应用里切面正常生效的配置方式。
内容来源于stack exchange
相关产品推荐
相关产品推荐

