例,有乙個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...