Spring 自動裝配的二義性實(shí)例解析
這篇文章主要介紹了Spring 自動裝配的二義性實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
1.我們知道可以用Spring的自動裝配(@Autowired)將Bean應(yīng)用注入到構(gòu)造參數(shù)和屬性中,但是,注意了,僅有一個bean匹配需要的結(jié)果時,自動裝配才可以生效。如果有多個bean匹配同一個結(jié)果,這種歧義性會阻礙Spring自動裝配屬性,構(gòu)造參數(shù)或方法參數(shù)。
大白話說一下,就如我們有一個甜片接口(Dessert)里面有一個好吃的方法(good)當(dāng)我們只有一個餅干實(shí)現(xiàn)這個接口時,Spring容器會選擇餅干來裝配,但是還有一個蛋糕實(shí)現(xiàn)接口時,這個時候Spring就不知道去選擇哪個實(shí)現(xiàn)類來裝配了。代碼上!
(1)甜片的接口
package jinjin; /** * * @author 雪飛oubai * 甜點(diǎn)接口 */ public interface Dessert { public void good(); }
(2)有餅干實(shí)現(xiàn)這個接口
package jinjin; import org.springframework.stereotype.Component; /** * @author 雪飛oubai * 餅干類實(shí)現(xiàn)接口 */ @Component public class Cookies implements Dessert{ @Override public void good() { System.out.println("餅干好吃!"); } }
(3)測試類,使用@Autowired來自動裝配
package jinjin; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /** * @author 雪飛oubai * 測試一下 */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes=ConfigTest.class) public class CommTest { @Autowired private Dessert dessert; @Test public void test(){ dessert.good(); } }
(4)java配置類
package jinjin; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; /** * @author 雪飛oubai * java配置類 */ @Configuration @ComponentScan public class ConfigTest { }
運(yùn)行結(jié)果
(5)再加一個蛋糕類實(shí)現(xiàn)接口
package jinjin; import org.springframework.stereotype.Component; /** * @author 雪飛oubai * 蛋糕類實(shí)現(xiàn)甜片接口 */ @Component public class Cake implements Dessert { @Override public void good() { System.out.println("蛋糕好吃!"); } }
(6)繼續(xù)運(yùn)行看結(jié)果
報了NoUniqueBeanDefinitionException的異常。這就是自動裝配的歧義性
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java二維數(shù)組與稀疏數(shù)組相互轉(zhuǎn)換實(shí)現(xiàn)詳解
在某些應(yīng)用場景中需要大量的二維數(shù)組來進(jìn)行數(shù)據(jù)存儲,但是二維數(shù)組中卻有著大量的無用的位置占據(jù)著內(nèi)存空間,稀疏數(shù)組就是為了優(yōu)化二維數(shù)組,節(jié)省內(nèi)存空間2022-09-09fastjson全局日期序列化設(shè)置導(dǎo)致JSONField失效問題解決方案
這篇文章主要介紹了fastjson通過代碼指定全局序列化返回時間格式,導(dǎo)致使用JSONField注解標(biāo)注屬性的特殊日期返回格式失效問題的解決方案2023-01-01Springboot項(xiàng)目接口限流實(shí)現(xiàn)方案
這篇文章主要介紹了Springboot項(xiàng)目接口限流實(shí)現(xiàn)方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08基于Mybatis Plus實(shí)現(xiàn)代碼生成器CodeGenerator
這篇文章主要介紹了基于Mybatis Plus實(shí)現(xiàn)代碼生成器CodeGenerator,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-08-08java中MultipartFile和File最簡單的互相轉(zhuǎn)換示例
這篇文章主要給大家介紹了關(guān)于java中MultipartFile和File最簡單的互相轉(zhuǎn)換的相關(guān)資料,MultipartFile和File都是Java中用于處理文件上傳的類,MultipartFile用于處理上傳的文件,File用于處理本地磁盤上的文件,需要的朋友可以參考下2023-09-09