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 方法能否被代理的主要内容,如果未能解决你的问题,请参考以下文章
第二节——关键字学习(public,protected,private,this,super,final,static)
php 关键字 public private protect final static const
浅析java修饰符之public default protected private static final abstract
Java Modifiers, default/public/protected/private/ final/static/transient/synchronized/volatile(示例代码
2.匿名类,匿名类对象,private/protected/public关键字abstract抽象类,抽象方法final关键字的使用,多线程Thread类start方法原理