Spring Boot 3.1.0中使用@AspectJ拦截并修改Integer.parseInt参数失败的问题排查与方案咨询
Spring Boot 3.1.0中使用@AspectJ拦截并修改Integer.parseInt参数失败的问题排查与方案咨询
我来帮你梳理下这个问题的核心原因和可行方案:
首先得明确一个关键点:你的test1切面能生效,但是aroundParseInt不行,本质是Spring AOP的局限性导致的。
为什么两个切面表现不同?
- 你的
test1切面拦截的是bknd.Siam.Dao.cobros.D_Cobros_Admin这个类的方法,这个类是你自己项目里的,并且应该是被Spring容器管理的Bean(比如加了@Service/@Component之类的注解)。Spring AOP基于动态代理实现,只能拦截Spring容器中Bean的方法调用,所以这个切面能正常工作。 - 而
Integer.parseInt是JDK核心类的静态方法,既不是Spring Bean,也不属于你项目的类,Spring AOP的动态代理机制根本触达不到这类方法,所以你的around切面完全不会触发。
那网上说的“可以拦截第三方类方法”是怎么回事?
没错,要拦截JDK类或者第三方库的方法,必须用原生AspectJ织入,而不是Spring AOP。Spring AOP只是AspectJ的一个子集,只实现了AspectJ的注解语法,但底层用的是动态代理,只能处理Spring Bean的方法;而原生AspectJ支持编译期织入(CTW)和加载期织入(LTW),可以直接修改类的字节码,不管是不是Spring Bean、是不是静态方法都能拦截。
不用工具类的可行方案:AspectJ加载期织入(LTW)
如果你不想自己写一个工具类包装parseInt,可以用LTW来实现,步骤如下:
- 补充依赖:在pom.xml(或build.gradle)中添加AspectJ相关依赖:
<!-- AspectJ Runtime --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.9.20</version> </dependency> <!-- AspectJ Weaver --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.20</version> </dependency> <!-- Spring Aspects --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>6.0.9</version> <!-- 和Spring Boot 3.1.0对应版本匹配 --> </dependency> - 开启LTW:
- 在你的Spring Boot启动类上添加
@EnableLoadTimeWeaving注解; - 或者在
application.properties中添加配置:spring.aop.proxy-target-class=true spring.aspectj.weaving=on
- 在你的Spring Boot启动类上添加
- 验证切面:确保你的
aroundParseInt切面的切点写法正确(你现在的execution(int java.lang.Integer.parseInt(String))是对的),可以在方法里加一句日志输出,比如System.out.println("成功拦截到Integer.parseInt调用!"),启动项目后调用Integer.parseInt就能看到日志了。
注意事项
- 如果是用Jar包直接运行Spring Boot项目,可能需要在启动命令中加上JavaAgent参数,指定aspectjweaver的路径:
java -javaagent:/path/to/aspectjweaver-1.9.20.jar -jar your-project.jar - 确保AspectJ的版本和Spring Boot的版本兼容,Spring Boot 3.1.0对应的Spring版本是6.0.x,AspectJ 1.9.20是兼容的。
总结一下:用Spring AOP本身是做不到拦截Integer.parseInt的,但用原生AspectJ的LTW是可以实现的,不需要自己写工具类包装。
备注:内容来源于stack exchange,提问作者Isaachjk
相关产品推荐
相关产品推荐

