繁体   English   中英

用于Serializable的Spring AOP切入点

[英]Spring AOP Pointcut for Serializable

是否可以为SpringBean Serializable创建切入点?

我想用语法拦截我的控制器的writeObject和readObject:

execution(* ((@org.springframework.stereotype.Controller java.io.Serializable)+).*(..))

我认为问题是readObject / writeObject是私有的,并以不同的方式调用。 有什么建议吗?

问题是:Spring AOP将无法匹配这些切入点。 Spring AOP仅匹配公共方法的切入点。 您将需要AspectJ编译或加载时间编织才能使其正常工作。

注意

由于Spring的AOP框架基于代理的特性,受保护的方法根据定义不会被拦截,既不用于JDK代理(这不适用),也不用于CGLIB代理(这在技术上可行,但不建议用于AOP)。 因此,任何给定的切入点都只能与公共方法匹配!

如果您的拦截需要包括受保护/私有方法甚至构造函数,请考虑使用Spring驱动的本机AspectJ编织而不是Spring的基于代理的AOP框架。 这构成了具有不同特征的不同AOP使用模式,因此在做出决定之前一定要先熟悉编织。

资料来源: 8.2.3.1。 支持的切入点指示符

在你问之前:将方法公开也无济于事,因为它们将由Java序列化机制调用,而不是由Spring调用,因此Spring AOP不知道发生了什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM