-
表现
在修改一段已存在的方法后从在个方法中使用类的属性都为null。
-
原理
SpringBoot使用Cglib进行动态代理,生成代理对象是使用Objenesis创建。问题就出在使用Objenesis创建的代理对象的属性值都为空。
那为什么我们平时使用时都不会出现这个问题呢?从这次导致报错的修改来看是因为改动的方法使用了final修饰。因此无法继承重写这个方法,导致不能拦截调用转发到被调用的类中,最终在动态生成的代理类中执行。 -
总结
使用AOP代理的类时应该调用非final修饰方法确保可以将调用转发到被代理类,在方法内部调用则不受限制。
记录SpringBoot中AOP动态代理的坑
最新推荐文章于 2024-01-12 09:59:06 发布