我熟悉Spring AOP
。正如我在春季文档http://docs.spring.io/spring/docs/3.1.x/spring-framework-reference/html/aop.html中所读到的那样,Spring AOP
致力于代理的概念。
在 8.2.3.1支持的切入点指示符部分中,我找到了以下注释
由于Spring的AOP框架基于代理的特性,受到保护 根据定义,方法既不被拦截,也不用于JDK代理 (这不适用)也不适用于CGLIB代理(如果是这样的话) 技术上可行,但不建议用于AOP目的)。作为一个 结果,任何给定的切入点都将与公共方法相匹配 只有!
起初,我并不相信它,所以我试图在没有使用接口的情况下实现它,默认情况下所有方法都是公开的,并且对上述情况感到惊讶。由于代理类是建议/目标对象的子类,受保护的方法可以由子类访问,所以我认为受保护的方法可以正常工作。
有人可以告诉我为什么不拦截受保护的方法吗?我错过了什么吗?
答案 0 :(得分:1)
事实上,在去年春天的文档中,显然可以使用cglib
由于Spring的AOP框架基于代理的特性,目标对象内的调用根据定义不会被截获。对于JDK代理,只能拦截代理上的公共接口方法调用。使用CGLIB,代理上的公共和受保护方法调用将被拦截,甚至包括必要的包可见方法。但是,通过代理进行的常见交互应始终通过公共签名进行设计。
因为他们提到公共和包可见都包含在cglib的使用中,尝试使用latests spring版本,他们可以相应地更新这些东西
检查 here
答案 1 :(得分:0)
JDK代理基于接口,这意味着所有实现的方法都是公共的