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方法,子类可以重新定义,这种情况不是重写。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值