2013-12-19 20 views
4

我想要一個攔截所有方法調用的JAR,例如是否有可能創建一個自動應用於客戶端項目中的類的方面的JAR?

​​

假設上面是我,想客戶端使用方面。我將它編譯成JAR並提供給Maven。

現在,客戶端將使用該jar作爲依賴項,例如,

<dependency> 
     <groupId>cool-group</groupId> 
     <artifactId>cool-artifact</artifactId> 
     <version>1.0.0</version> 
    </dependency> 

該工件(JAR)具有所提及的方面。

現在只需聲明一個Maven依賴項就可以對方面工作

幾件事情,可能是重要的:

  1. 我打算用AspectJ(也許Spring AOP中,如果需要的話),
  2. 客戶端可能會是Web應用程序與正常web.xml
  3. 客戶端使用Maven構建
  4. 我希望客戶端儘可能簡單配置 - 在我最初的想法中,Maven依賴關係就足夠了。
  5. 的「註釋JAR」將包含一個網絡的片段,因此有可能宣佈一些自定義ServletContextListener有..

任何想法?

回答

1

不,這是不可能的,因爲AspectJ必須在任何客戶端類之前啓動。所有的客戶端類都應該通過一個特殊的增強類加載器來加載,它將處理註釋。

另一件事是春天的AOP。它在應用程序上下文啓動期間編織bean,並且不需要特殊的類加載器。如果他使用彈簧,那將是最簡單的方法。添加Maven依賴關係,然後在應用程序上下文中配置AOP。

There are four types of weaving:

  • 編譯時編織是最簡單的方法。當你有一個應用程序的源代碼 時,ajc將從源代碼編譯並且 產生編織的類文件作爲輸出。編織器的調用是 積分到ajc編譯過程。這些方面本身可能是源代碼或二進制的形式。如果 受影響的類需要編譯這些方面,則必須在編譯時進行編織。 方面是必需的,例如,當他們將成員添加到類中時,其他正在編譯的類引用添加的成員。
  • 使用 編譯後編織(有時也稱爲二進制編織)編織現有的類文件和JAR文件。與編織時間 編織一樣,用於編織的方面可以採用源或二進制的形式,並且可以自身由方面編織。
  • 加載時織入(LTW)只是簡單的二進制編織,直到 指出一個類加載器加載一個類文件,並將該類定義爲 JVM。爲了支持這一點,需要一個或多個「編織類加載器」,或者由運行時環境明確提供的 或通過 「編織代理」啓用。
  • 運行時編織,這就是Spring正在做的事情。我們將 定義爲已經定義的類的編織。 到JVM
+0

好的,謝謝。很高興知道至少Spring會爲這個工作提供機會。但是,你有關於如何在「方面瓶子」中配置spring的想法/片段嗎? – Parobay

+0

http://docs.spring.io/spring/docs/2.5.4/reference/aop.html - 這裏是一個文檔。你在jar中打包方面,然後客戶端添加maven dependency並將它們插入到應用程序上下文中。 – Mikhail

+0

看到就是這樣。我不希望客戶端將它們插入到應用程序上下文中。那麼微不足道。客戶端可能沒有應用程序上下文,因爲它們不使用spring。這方面應該適用於正常的課程,例如在客戶端的'web.xml'中註冊servlet – Parobay

相關問題