Spring 2.0 中的前置增强

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

正如你们大多数人所知,Spring 2.0 的一大改进是添加了 AspectJ 切入点语言,并在总体上更好地与 AspectJ 集成。虽然我认为每个人都相信从长远来看这将是一个巨大的好处,但它也导致了一些问题。我们发现 Spring AOP 一直有一些行为,而 AspectJ 从来没有做过。

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

这对您(用户)意味着什么?这取决于您未来打算做什么。我们已经决定,如果您继续使用 AOP Alliance 接口进行 AOP,您将继续获得与以往相同的语义;没有任何改变。如果您将来使用 AspectJ 切入点语言,您将获得准确的 AspectJ 语义。如果您想使用 AspectJ 的切入点语言,但仍然想更改参数值,这是可能的,但您需要遵守 AspectJ 的语义,并使用环绕增强而不是前置增强。

所以最终,我们仍然设法实现了即插即用的目标,同时在适当的地方坚持 AspectJ 语义。


附:这篇文章是为已故的伟大的“Penc Smith”写的讣告。如果您参加过 Core Spring 来自 Interface21 的培训,您就会知道我在说什么。如果没有,请在 The Spring ExperienceNo Fluff Just Stuff 上与我见面,我会边喝一杯边告诉你这个故事。

获取 Spring 新闻简报

通过 Spring 新闻简报保持联系

订阅

取得领先

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

了解更多

获得支持

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

了解更多

即将举行的活动

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

查看全部