2014-12-05 154 views
1

我想澄清一下:彈簧自動裝配自動檢測

關於自動裝配「自動檢測」

在一些資源,我發現如果 「默認的構造被發現,那麼‘自動佈線構造’適用 如果。不適用「按類型自動佈線」

而在某些資源中,我發現如果 「找到默認構造函數,則應用」按類型自動佈線「。 如果不是「自動佈線構造函數」適用。

任何人都可以確認哪個是正確的?與此混淆。

+0

您是否收到了不正確的實例注入?你問的有什麼不同? – 2014-12-05 09:33:29

+0

不,我對這些陳述感到困惑,我想知道哪一個是對的。 – 2014-12-05 09:34:14

+0

[檢查此鏈接它會幫助你] [1] [1]:http://stackoverflow.com/questions/3153546/how-does-autowiring-work-in-spring – MiDhuN 2014-12-05 09:53:41

回答

0

這裏應該沒有混淆。

autodeiring by autodetect使用兩種模式之一即構造函數或byType模式。首先它會嘗試尋找有參數的有效的 構造函數,如果發現構造函數模式被選中。如果bean中沒有定義構造函數,或者存在明確的默認無參數構造函數,則選擇autowire byType模式。

4

在Spring框架中,您可以自動連線自動佈線功能。要啓用它,只需在中定義「autowire」屬性即可。

<bean id="customer" class="com.midhun.common.Customer" autowire="byName" /> 

在Spring中,支持5種自動佈線模式。

1.no - 根據屬性名自動佈線 - 缺省情況下,自動佈線,通過「裁判」屬性手動設置

2.byName。如果一個bean的名稱與其他bean 屬性的名稱相同,則自動連線它。

3.byType - 按屬性數據類型自動佈線。如果一個bean的數據類型與其他bean屬性的數據類型兼容,則自動連線它。

4.constructor - 構造函數參數中的byType模式。

5.autodetect - 如果找到默認的構造函數,使用「autowired by constructor」;否則,請使用「按類型自動佈線」。

不,您不需要使用默認(無arg)構造函數。如果沒有在bean中定義構造函數會選擇它,如果u希望你可以使用..自動佈線的依賴上你的需求類型

@Qualifier還可以幫助您指定注射

你可以通過@Quanlifier告訴Spring哪些bean應該自動裝配。

package com.midhun.pgm; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.beans.factory.annotation.Qualifier; 

public class Customer { 

    @Autowired 
    @Qualifier("personA") 
    private Person person; 
    //... 

}