同乙個介面有兩個或兩個以上實現類時,如何注入

2021-10-09 20:52:05 字數 1360 閱讀 5660

例,有乙個testservice介面,**如下:

public

inte***ce

testservice

此時有兩個實現類實現了這個介面。

實現類一:

@service

("testserviceimpl"

)public

class

testserviceimpl

implements

testservice

}

實現類二:
@service

("testservicetwoimpl"

)public

class

testservicetwoimpl

implements

testservice

}

如果此時按照常規@autowired注入,系統會報錯,注入不進去。

@controller

("testcontroller"

)public

class

testcontroller

}

@autowired是按 bytype的方式尋找介面的實現類,當要注入的型別在容器中存在多個時,spring是不知道要引入哪個實現類的,所以會報錯。

如何解決

這種場景下,只能通過 byname 注入的方式。可以使用 @resource 或 @qualifier 註解。

@resource 預設是按照 byname 的方式注入的, 如果通過 byname 的方式匹配不到,再按 bytype 的方式去匹配。所以上面的引用可以替換為:

@controller

("testcontroller"

)public

class

testcontroller

}

執行正常。

或者將@qualifier與@autowired組合使用,可替換為:

@controller

("testcontroller"

)public

class

testcontroller

}

執行正常。

總結1、@autowired 是通過 bytype 的方式去注入的, 使用該註解,要求介面只能有乙個實現類。

2、@resource 可以通過 byname 和 bytype的方式注入, 預設先按 byname的方式進行匹配,如果匹配不到,再按 bytype的方式進行匹配。

3、@qualifier 註解配合@autowired 一起使用。

如何判斷兩個IP屬於同乙個網路

ip位址 網路位址 主機位址 又稱 主機號和網路號組成 ip位址是乙個 4 8bit 1位元組 由 0 1 組成的數字串 ip4協議 子網掩碼又叫網路掩碼 位址掩碼 子網路遮罩,是乙個 4 8bit 1位元組 由 0 1 組成的數字串 它的作用是遮蔽 遮住 ip位址的一部分以劃分成網路位址和主機位址...

JAVA兩個引用指向同乙個陣列

在這段程式中,arrayb是通過arraya賦值得到的,並不是new出來的,所以他們內部儲存的位址值是一樣,他們指向的是同乙個陣列。注 陣列在程式執行當中,長度是不能改變的。arraya與arrayb即為引用。可以理解為c語言中的指標,都是儲存乙個記憶體位址值,指向一塊記憶體。引用與指標的區別 1....

PLSQL訪問同乙個Oracle的兩個例項

客戶端直接看配置檔案,wolfdb 和zt 是例項 listener.ora network configuration file c.0 dbhome 1 network admin listener.ora generated by oracle configuration tools.list...