protected,private final 方法能否被代理

Posted 技术无产者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了protected,private final 方法能否被代理相关的知识,希望对你有一定的参考价值。

1.JDK动态代理

private,protected final方法肯定不能被代理,因为接口就不支持private protected final方法

static 方法不能被代理

2.CGLIB动态代理

1.private

private方法肯定是不能被代理的,因为子类和其它类都不能访问一个类的私有方法

2.protected

protected方法到是可以被代理,但是CGLIB是基于继承关系来实现的,生成的代理类中对于protected的代理方法,也是protected的,访问范围受限制

3.final

final修饰的方法不能被代理,因为final修饰的方法不能被子类重写,会报错

final修饰的类 不能被代理,因为final修饰的类不能被继承

4.static

静态方法不能被代理

总结:

Spring事务基于Spring AOP,Spring AOP底层用的动态代理,动态代理有两种方式:

  • 基于接口代理(JDK代理)
    • 基于接口代理,凡是类的方法非public修饰,或者用了static关键字修饰,那这些方法都不能被Spring AOP增强
  • 基于CGLib代理(子类代理)
    • 基于子类代理,凡是类的方法使用了private、static、final修饰,那这些方法都不能被Spring AOP增强 由于是继承关系,无法代理final的类和方法(无法继承),或是private的方法(对子类不可见)。

protected 方法的作用域范围:

1>同package下可以随意访问

2> 不在同一包下的子类可以在这个子类中访问父类的protected方法

final方法规则

规则1:final修饰的方法不可以被重写

规则2:final修饰的方法仅仅是不能重写,但它完全可以被重载。

规则3:父类中private final方法,子类可以重新定义,这种情况不是重写。

以上是关于protected,private final 方法能否被代理的主要内容,如果未能解决你的问题,请参考以下文章

为啥`private val`和`private final val`不同?

eclipse中定义的private变量保存之后都成final是为啥

java 怎样动态修改 private static final int 值

static private 与 final 的用法总结

final以及publicprotected(default)private权限修饰符总结

[转] Java中public,private,final,static等概念的解读