2010-08-19 81 views
5

幾個月前我和GUICE一起工作,現在當我回到它時,我發現我必須重讀Guice文檔和示例以瞭解我對代碼所做的工作。Guice vs AspectJ

但是,當我看AspectJ時,它非常直觀。它是Java語言的直觀擴展。我覺得我可以坐下來立刻寫AspectJ代碼。

因此,我很想放棄追求Guice並使用AspectJ。尤其是Spring正在生成AspectJ代碼。

Guice在AspectJ上面有什麼特點可以阻止我放棄Guice?

爲什麼Google不放棄Guice並改用AspectJ?

副Versa,AspectJ的哪些功能會鼓勵我放棄Guice,除了它的直觀性?

如果我可能被允許在這裏「編織」一個問題,那麼排除Java語言與AspectJ合併或在未來版本的Java中提供類似的「方面」是什麼?

注意觸發快樂刪除-azillas,我意識到這個問題,可能是過於籠統 - 但如果我知道要問什麼進一步的細節,那麼我不會要問,但只是谷歌/冰什麼我知道我不知道。正如你所看到的,我的吉斯知識已經退化得如此糟糕以至於我甚至都不認識我自己的手寫作

+0

我一直都有着同樣的感覺。爲什麼一些依賴注入框架,如果我有AspectJ? – 2012-05-04 12:30:30

回答

19

正如Peter所說,Guice和AspectJ是完全不同的東西。 Guice執行依賴注入,節省大量工廠寫作,同時使代碼更加靈活,易於測試並添加有用的東西,如範圍。它也恰好允許通過方法攔截(通過編程配置攔截哪些方法,而不是DSL)來實現AOP的簡單,簡單的方法。這實際上只是它提供的另一個獎勵,而不是它的核心目標。

至於爲什麼AspectJ沒有合併到Java中...我不覺得許多人會希望發生這種情況。 AOP功能強大,但危險。雖然這對於某些用途來說非常有用,並在這些情況下簡化了代碼,但如果過度使用它,可能會使得理解程序中發生的情況變得更加困難。

7

根據我AspectJ和Guice做了不同的事情。

Guice注入依賴和AspectJ處理橫切關注。

如果你使用spring,那麼確實使用Guice的價值較低,因爲有太多的重疊,然後Spring/AspectJ的共生是一個引人注目的解決方案。

我個人比較喜歡guice更適合非春季項目,因爲它的重量更輕。

2

Spring基於依賴注入和麪向方面的編程。

Guice是一個依賴注入引擎。

AspectJ是一個面向方面的引擎。

看到區別? Guice和AspectJ是互補的;春天已經有了。

應該提到的是,除了AspectJ之外,Spring還支持自己的基於攔截器的AOP,它不需要字節碼操作。

+4

Guice包含自己的AOP支持: http://code.google.com/p/google-guice/wiki/AOP – 2010-08-20 03:13:32

+0

不知道;謝謝。看起來像Spring的方法攔截器。它是Bob Lee的原始Guice的一部分還是在第一次發佈後添加的? – duffymo 2010-08-20 11:29:00

+1

AbstractModule.bindInterceptor是Guice 1.0的一部分。 – 2010-08-26 10:16:01