Spring 2.0 之前的 Advice

工程 | Ben Hale | 2006年9月5日 | ...

如大多数人所知,Spring 2.0 中的一项重大改进是添加了 AspectJ 切点语言以及与 AspectJ 的整体更好集成。虽然我认为每个人都相信从长远来看这将是一大益处,但它也导致了一些问题。我们发现 Spring AOP 一直以来都具有一些行为,而 AspectJ 从未有过。

出现的一个主要问题是 Before Advice 的行为。如果您在 Spring 1.x 中使用过 Spring AOP,您可能知道 Spring 允许您在将参数传递给目标方法之前更改参数值。您可能不知道的是,AspectJ 从未允许过这种行为。

这对您用户来说意味着什么?这取决于您将来打算做什么。我们决定,如果您继续对您的 AOP 使用 AOP Alliance 接口,您将继续获得一直以来的相同语义;没有任何变化。如果您将来使用 AspectJ 切点语言,您将获得准确的 AspectJ 语义。如果您想使用 AspectJ 的切点语言,但仍想更改参数值,这是可能的,但您需要遵守 AspectJ 的语义并使用 Around Advice 而不是 Before Advice。

因此,最终,我们仍然设法实现了即插即用的目标,同时在适当的地方遵守 AspectJ 语义。


附注:这篇博文是对已故的伟大“Penc Smith”的悼念。如果您参加过 核心 Spring 培训课程 Interface21,您就会知道我在说什么。如果不是,请在 The Spring ExperienceNo Fluff Just Stuff 找到我,我会边喝啤酒边跟您讲这个故事。

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,助您加速进步。

了解更多

获取支持

Tanzu Spring 在一个简单的订阅中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将举行的活动

查看 Spring 社区中所有即将举行的活动。

查看全部