2016-09-27 23 views
2

我在下面的場景中幾乎沒有懷疑。帶有服務實現的Spring Autowired註釋

有一個接口和兩個實現類:

接口:

interface ServiceInt 
{ 
    public void save(); 
} 

首先實現類:

Public class ServiceIntImpOne implements ServiceInt 
{ 
    public void save() 
    { 
    // I am first service implementation 
    } 

} 

二實現類:

Public class ServiceIntImpTwo implements ServiceInt 
{ 
    public void save() 
    { 
    // I am Second service implementation 
    } 

} 

Main類調用保存的實現類的方法:

Public class controller 
{ 
    @Autowired ServiceInt; 

    public void save() 
    { 
    ServiceInt.save() 
    } 
} 

我的問題:

  1. ServiceInt.save() –其保存服務類實現的方法將它調用?
  2. 我們如何使用ServiceIntImpTwo類的保存方法實現?
  3. 自動裝配是如何工作的?
+0

我編輯我的回答 – reos

回答

2

ServiceInt.save() - 它保存服務類實現 的方法將它調用?

如果你有相同類型(通過註釋或通過XML定義的bean)的兩個bean當你自動裝配豆類它會失敗(拋出異常),因爲春天不知道什麼注入豆。

caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: 
    No unique bean of type [ServiceInt] is defined: 

我們如何使用ServiceIntImpTwo 類的保存方法實現?

如果你在一個XML文件中定義你的bean,那麼你可以,如果你正在使用註釋,而不是使用id屬性

<bean id="beanTwo" class="ServiceIntImpTwo" /> 

那麼你就可以自動連接後使用限定符註釋

@Autowired 
@Qualifier("beanTwo") 
ServiceInt myServiceTwo; 

@Component 
Class ServiceIntImpTwo impl...{} 

然後你就可以自動裝配

@Autowired 
@Qualifier("serviceIntImpTwo ") 
ServiceInt myServiceTwo; 

如何自動裝配工作?

這可以在互聯網上閱讀。

http://memorynotfound.com/handling-multiple-autowire-dependencies-with-spring-qualifier/ https://www.mkyong.com/spring/spring-autowiring-qualifier-example/ https://www.tutorialspoint.com/spring/spring_qualifier_annotation.htm

+0

你提到@Qualifier(「serviceIntImpTwo」),但是從那裏值「serviceIntImpTwo」會來,因爲我們還沒有註釋的情況下,任何地方定義這個值。 –

+0

默認情況下,Spring爲bean創建一個名稱,它與該類相同,但小寫的第一個字符 – reos

+0

非常感謝您的幫助:) –

0

如果你有兩種實現一個接口,你需要提供春季提示使用哪一個:

  1. 可以使用@Qaulifier註釋
  2. 可以使用@Profile,選擇活動的配置文件。