2011-05-31 41 views

回答

15

那些不是類,是接口。這個名字只是Spring的一個約定,意思是如果一個特殊的框架對象被框架管理,它將被注入到這個類中。

從的文檔

直接:

接口由希望被通知ApplicationContext中,它在運行的任何物體來實現

在這種情況下,bean這一點。實現此接口將獲得對管理應用程序的ApplicationContext的引用。

+0

非常感謝!我越來越明白了。例如,如果您找到一個名爲「EmploymentEntityAwareService」的界面,您會認爲任何對象實施的服務都有「Employment」實體作爲字段,對嗎? – zono 2011-05-31 14:36:00

+2

@yusaku可能,這不是一個真正的硬性規則。意識主要是一個Spring的約定,我不會推薦在你自己的類名中使用它,除非你有一個很好的理由。 Spring基本上是用「Aware」來表達的意思是「這個類現在意識到它正在被Spring管理」。通常,您希望避免直接使用這些接口來防止代碼依賴Spring Framework。它們被提供來處理類的直接與Spring容器交互的孤立情況。 – Jberg 2011-05-31 14:44:28

+0

@Jberg謝謝!好的,如果我需要,我會小心使用它。 – zono 2011-05-31 15:09:15

4

追加的形容詞,如‘感知’到最後往往是用於Java接口的命名方案,然後可以通過類來實現,產生的是代碼更流暢閱讀對人類,像

class Broker implements ApplicationContextAware { /* ... */ } 

它是很容易看到這個類是一個代理的東西,它知道如何處理應用程序上下文。除此之外,「Aware」後綴從Java(編譯器)角度來看沒有特別的意義略去。

+0

你能舉一個Spring框架之外的例子嗎? – 2011-05-31 13:47:09

+0

我目前還不知道某些東西,也許我會更好地說「形容詞」是用於接口而不是詳細說明Spring中使用的後綴約定。嗯。 – Waldheinz 2011-05-31 13:49:51

+0

@邁克爾,我有一些*知道*接口(如TransactionAware),我從來沒有用過春天,但我不會稱之爲'經常'使用。 – bestsss 2011-05-31 13:51:04

2

您引用的接口似乎是Spring特定的約定,允許對象與創建它們的依賴注入容器進行交互。通過實現接口,一個類表明它希望從容器中獲得某些信息,同時提供一種方法來傳遞這些信息。

我覺得它只是試圖找到一個提供這種功能的接口的通用名稱,而不一定是一個具有特定技術含義的強有力的約定。

+0

謝謝你的回答。我清楚了。如果你有更多的時間,我可以對我在@ mdrg的回答中寫的另一個問題有任何評論。 – zono 2011-05-31 14:51:56

1

的感知接口的概念:

如果我想春天類的對象像XmlBeanFactoryApplicationContext參考......在2個或多個類,則有3種可能的方式在那裏。

  1. 創建2 BeanFactories在兩個類。
  2. 創建一個類和共享所有需要的類。

在第一種情況下,我們不必要地創建2個BeanFactories。 在第二種情況下,課程緊密相連。

  • 如果我們的類實現BeanFactoryAware接口,並覆蓋稱爲合同方法public BeanFactory setBeanFactory(BeanFactory factory)然後IOC container看到特殊的接口並調用通過設置BeanFactory參照該setBeanFactory方法。
  • 3.在上述情況下,兩個問題不存在。

    相關問題