为什么Spring AOP无法代理私有方法
Spring Aop无法代理私有方法主要有2种原因,Java语言的访问权限控制和Spring aop的实现机制。
Java语言的访问权限控制
因为私有方法是是类的内部实现细节,私有方法只能被类中的其他方法进行调用,无法被其他类直接调用,这种限制导致了aop无法直接拦截私有方法的调用, 因为spring aop关心的横切点在组件的方法调用。
Spring Aop的实现机制
Spring Aop的主要实现方式有2种,JDK动态代理和Cglib动态代理,jdk动态代理是基于目标接口描述进行生成代理类的,而cglib动态代理是基于目标的继承进行重写实现代码增强,私有方法既不属于接口的方法也不可以被子类继承,所以无法在dialing对象中覆盖私有方法,
那我非得要对私有方法进行增强呢?
可以考虑使用@AspectJ,它是一个更强大的Aop解决方案,支持更灵活的切面表达式。