领先一步
VMware 提供培训和认证,助您加速进步。
了解更多如大多数人所知,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 语义。