您好,登錄后才能下訂單哦!
這篇文章主要介紹了Spring 自動裝配的二義性實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
1.我們知道可以用Spring的自動裝配(@Autowired)將Bean應用注入到構造參數和屬性中,但是,注意了,僅有一個bean匹配需要的結果時,自動裝配才可以生效。如果有多個bean匹配同一個結果,這種歧義性會阻礙Spring自動裝配屬性,構造參數或方法參數。
大白話說一下,就如我們有一個甜片接口(Dessert)里面有一個好吃的方法(good)當我們只有一個餅干實現這個接口時,Spring容器會選擇餅干來裝配,但是還有一個蛋糕實現接口時,這個時候Spring就不知道去選擇哪個實現類來裝配了。代碼上!
(1)甜片的接口
package jinjin; /** * * @author 雪飛oubai * 甜點接口 */ public interface Dessert { public void good(); }
(2)有餅干實現這個接口
package jinjin; import org.springframework.stereotype.Component; /** * @author 雪飛oubai * 餅干類實現接口 */ @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 { }
運行結果
(5)再加一個蛋糕類實現接口
package jinjin; import org.springframework.stereotype.Component; /** * @author 雪飛oubai * 蛋糕類實現甜片接口 */ @Component public class Cake implements Dessert { @Override public void good() { System.out.println("蛋糕好吃!"); } }
(6)繼續運行看結果
報了NoUniqueBeanDefinitionException的異常。這就是自動裝配的歧義性
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。