Java 为什么Spring AOP不拦截受保护的方法

Java 为什么Spring AOP不拦截受保护的方法,java,spring,proxy,spring-aop,protected,Java,Spring,Proxy,Spring Aop,Protected,我熟悉springaop。正如我在spring文档中所读到的,SpringAOP在代理的概念上工作 在8.2.3.1节支持的切入点指示符中,我找到了以下注释 由于Spring的AOP框架基于代理的特性,它受到保护 根据定义,方法不会被拦截,JDK代理也不会 (不适用时)也不适用于CGLIB代理(适用时 技术上可能,但不建议用于AOP目的)。作为一个 结果,任何给定的切入点都将与公共方法匹配 只是 起初,我不相信这一点,所以我尝试在不使用默认情况下所有方法都是公共的接口的情况下实现它,并对上述情况

我熟悉
springaop
。正如我在spring文档中所读到的,
SpringAOP
在代理的概念上工作

8.2.3.1节支持的切入点指示符中,我找到了以下注释

由于Spring的AOP框架基于代理的特性,它受到保护 根据定义,方法不会被拦截,JDK代理也不会 (不适用时)也不适用于CGLIB代理(适用时 技术上可能,但不建议用于AOP目的)。作为一个 结果,任何给定的切入点都将与公共方法匹配 只是

起初,我不相信这一点,所以我尝试在不使用默认情况下所有方法都是公共的接口的情况下实现它,并对上述情况的真实性感到惊讶。因为代理类是adviced/target对象的子类,并且受保护的方法可以被子类访问,所以我认为受保护的方法可以很好地工作


有人能告诉我为什么不拦截受保护的方法吗?我遗漏了什么吗?

JDK代理基于接口,这意味着所有实现的方法都将是公共的

事实上,在去年春天的文档中,使用cglib显然是可能的

由于Spring的AOP框架基于代理的特性,根据定义,目标对象内的调用不会被拦截。对于JDK代理,只能拦截代理上的公共接口方法调用。使用CGLIB,代理上的公共和受保护的方法调用将被拦截,如果需要,甚至可以打包可见的方法。然而,通过代理进行的公共交互应始终通过公共签名进行设计

当他们提到cglib的使用中包含public和package visible时,尝试使用最新的spring版本,他们可以相应地更新这些内容


检查

我没有使用任何接口,这意味着将使用cglib代理。我在我的帖子中也更新了相同的接口。Spring的家伙可能希望与JDK代理保持一致。基于JDK和CGLIB,您不希望有不同的代理配置和不同的结果。是的,这是我的罚单,在我去年报告了多年的Spring4.3.8的错误信息后命名和更新的。这里的问题比这要古老得多,所以当时手册是错的。