Spring Boot升级至2.0后出现CglibAopProxy代理final方法警告求助
解决Spring Boot 2.0升级后CglibAopProxy的final方法代理警告
嘿,这个警告我在升级Spring Boot的时候也碰到过,本质是CGLIB代理的局限性——它没法代理被标记为final的方法,而WebApplicationObjectSupport的setServletContext刚好是个final方法,当你的类继承了这个类且被AOP代理时,就会触发这个警告。下面给你两个实用的解决思路:
方法一:切换为JDK动态代理
JDK代理基于接口实现,不会受final方法的限制。你可以通过两种方式配置:
- 在你的AOP配置类上添加注解:
@EnableAspectJAutoProxy(proxyTargetClass = false),其中proxyTargetClass=false会强制使用JDK代理(Spring Boot中默认如果类有接口会自动用JDK,但有时配置会被改成CGLIB)。 - 在
application.properties(或application.yml)里添加配置:
注意:使用JDK代理的前提是你的被代理类必须实现至少一个接口,不然JDK代理无法生效。spring.aop.proxy-target-class=false
方法二:忽略警告(调整日志级别)
如果你的业务逻辑不需要代理那个final方法,或者没法切换到JDK代理(比如类没实现接口),这个警告其实不会影响应用运行,只是看着碍眼。你可以通过调整日志级别隐藏它:
- 若使用logback,在
logback.xml里添加:<logger name="org.springframework.aop.framework.CglibAopProxy" level="ERROR"/> - 若用application.properties配置日志:
这样就只会显示这个类的ERROR级别日志,WARN会被过滤掉。logging.level.org.springframework.aop.framework.CglibAopProxy=ERROR
补充一句:这个警告只是Spring的友好提示,不会导致功能异常,要是不介意日志里有这条WARN,也可以直接忽略它~
内容的提问来源于stack exchange,提问作者ROZZ
相关产品推荐
相关产品推荐

