开发者社区> 问答> 正文

java中spring aop为什么无法代理静态方法?

java中spring aop为什么无法代理静态方法?

展开
收起
格格的阿里云 2022-03-31 18:26:51 1022 0
1 条回答
写回答
取消 提交回答
  • 因为静态方法是可继承但不可被重写的
    比如存在A类和B类,A类有静态方法 a(),B类继承A类,B类继承了A类的静态方法,所以B类可直接使用A类的静态方法。此时若在B类中尝试重写静态方法 a(),新的静态方法 a()将变成独属于B类的静态方法,而失去了原属于A类静态方法 a() 的继承关系。
    因为静态方法是独属于当前类的,如果进行定义就不会再继承父类的静态方法了,新的静态方法只与当前所属类挂钩
    Spring AOP 的 CGLIB 代理在于对父类方法的重写,而对静态方法的重写,会使其失去与父类静态方法的继承关系,违背了代理的核心目的,因此 CGLIB 直接排除了静态方法。

    2022-03-31 18:28:42
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载