2012-12-17 78 views
1

Spring文檔通過以下方式定義@Component註釋:「表示註釋類是」組件「。當使用基於註釋的配置和類路徑掃描時,這些類被認爲是自動檢測的候選對象。 「Spring:@Component

這是簡潔的,但它沒有說太多。我明白@Component用於表示Spring的一個類生命週期(創建/銷燬)將被管理。我有這樣的問題:我只需要在某個地方自動裝配的類中使用它(1),還是需要在具有自動裝配屬性(2)的類中使用它?

(1)

@Component 
class B { 
} 

class A { 

    // @Autowired 
    B b; 
} 

(2)

@Component 
class B { 
} 

@Component 
class A { 

    // @Autowired 
    B b; 
} 
+0

當您嘗試時發生了什麼? –

回答

6

嘛,嚴格地說你沒有在任何地方使用,您可以在XML定義豆類像在舊時代。您也可以像過去一樣使用@Service@Repository。但回到你的問題:

如果你的bean A未註明@Component或Spring上下文已知,它將永遠不會被Spring創建和管理。因此,您必須使用註釋或在XML中定義A

對於B也是如此。如果您希望它成爲自動裝配的主題,Spring必須知道它 - 無論是通過註釋掃描還是通過XML。

在一天結束時,使用XML,註釋還是Java配置並不重要。應用程序上下文知道兩個bean是很重要的。

+0

我只使用註釋(不是XML)在應用程序上下文中註冊對象。我將重寫我的問題:如果類A的對象只是手動創建的(並且考慮到類A具有自動裝配的屬性),它是否需要被應用程序上下文知道(如果這是通過xml或註釋完成的話,是否獨立)? –

+0

@AlanEvangelista:當然。如果你簡單地做'A a = new A',Spring是否應該知道這個'a'實例和它有'@ Autowired'字段的事實?它必須由Spring實例化。 –

相關問題