2011-05-24 40 views
2

Spring框架中的註釋是如何實現的?他們是通過使用依賴注入還是面向方面編程來實現的?註釋通常是用AOP實現的,他們可以「做」注入?

我以爲他們使用AOP,好吧,因爲註釋的東西會做某些指定的地方。另一方面,像@Autowired @Qualifier("beanID") IS依賴注入 - 也許註釋是基於AOP並可以實現傾向注入?它是否正確?

我只是在想它,因爲我正在閱讀有關春季的主要部分:di和aop ,我想知道註釋屬於哪裏。

回答

6

註釋不要任何事情,代碼可以做的事情註釋,這是一個巨大的差異。

我建議您閱讀Java教程中的Annotations以瞭解註釋的含義。

基本上有三種方式來處理註釋(可能有更多的,但我知道三):

Spring使用反射來讀註釋值,然後或者注入d依賴礦石添加AOP建議(還有更多的東西)。但是如果你在Spring中使用靜態AspectJ編譯,那麼在切入點中會使用一些相同的註釋。

+0

謝謝!例如@ Autowired @ Qualifier(「beanID」)Spring使用Reflection來注入一個依賴項。與@Transactional春天使用反射來添加AOP建議。正確? – nano7 2011-05-24 12:49:07

+0

@ nano7是的。 Spring AOP模仿了aspectj所做的事情,但是用反射而不是靜態編譯 – 2011-05-24 13:00:23

0

在Spring的上下文中(不僅僅是,但這是你的問題所在),註釋僅僅是元數據 - 與代碼相關的信息。它們只是方便(或不是)替換XML元數據,它可以做同樣的事情:例如,指定給定的setter應該用給定的參數調用。註釋和XML元數據之間的主要區別在於註釋與代碼捆綁在一起,因此它們可以用作方便的默認值,但您仍然可以使用XML bean定義覆蓋它們。

爲了完成「作業」,註釋代碼是不夠的(因爲編寫XML應用程序上下文描述符永遠不夠,您需要某種能夠讀取該代碼的bean工廠/應用程序上下文元數據和做任何要求。

0

一些JSR-250註解在Spring的認可和動態代理創建諸如@PostConstruct & @PreDestroy,這是容器啓動時完成。DI類型的註釋通過上下文指令,例如發現因爲DI發生在bean後處理之前,所以不需要代理。

Spring項目中的註釋(超過470) - http://gordondickens.com/wordpress/2011/05/20/annotation-reference-for-spring-projects/

+0

在您的主頁上有很好的註釋列表。如果他們可以根據他們使用的項目(安全,彈簧,批次)按字母順序排序,那麼它也會很好。 – nano7 2011-05-25 15:01:10

0

它們是可排序的 - 單擊內容下面的鏈接轉到Google Spreadsheet。

這將允許您排序它們。

順便說一下,現在有超過500個註釋(最近添加了Hibernate 3)。

我打算增加更多的細節時,我得到更集中的時間,其中包括:

  • 註釋參數標註的使用
  • 說明
+0

不,我不是說像「spring」,「javax」,「hibernate」,「roo」,「批次「,」mvc「......這會更有趣。 – nano7 2011-06-07 08:33:28