Spring 2.0 中的 Before Advice

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

如您所知,Spring 2.0 的重大改進之一是新增了 AspectJ pointcut 語言,並更完善地與 AspectJ 整合。雖然我認為這將會是長遠來看的一大優勢,但它也導致了一些問題。我們發現 Spring AOP 一直以來都有一些行為,但 AspectJ 從未有過。

其中一個主要問題是 Before advice 的行為。如果您在 Spring 1.x 中使用過 Spring AOP,您可能知道 Spring 允許您在參數傳遞給目標方法之前變更其值。但您可能不知道的是,AspectJ 從未允許這種行為。

這對您,使用者來說,意味著什麼? 這取決於您未來計畫做什麼。我們已決定,如果您繼續使用 AOP Alliance 介面進行 AOP,您將繼續獲得與以往相同的語意;沒有任何改變。如果您未來使用 AspectJ pointcut 語言,您將獲得精確的 AspectJ 語意。如果您想使用 AspectJ 的 pointcut 語言,但仍然想變更參數值,這是可能的,但您需要遵守 AspectJ 的語意,並使用 Around advice 而不是 Before advice。

因此,最終,我們仍然設法實現了我們的目標:在適當的情況下,在遵守 AspectJ 語意的同時,實現直接替換。


附註:這篇文章是紀念已故的偉大人物「Penc Smith」。如果您參加過 Interface21核心 Spring 培訓,您就會明白我在說什麼。如果沒有,請在 The Spring ExperienceNo Fluff Just Stuff 來看我,我會一邊喝啤酒一邊告訴您這個故事。

取得 Spring 電子報

隨時掌握 Spring 電子報的最新消息

訂閱

領先一步

VMware 提供培訓和認證,以加速您的進度。

了解更多

取得支援

Tanzu Spring 在一個簡單的訂閱中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位檔案。

了解更多

即將到來的活動

查看 Spring 社群中所有即將到來的活動。

查看全部