Spring 自動裝配的二義性實例解析
這篇文章主要介紹了Spring 自動裝配的二義性實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
1.我們知道可以用Spring的自動裝配(@Autowired)將Bean應(yīng)用注入到構(gòu)造參數(shù)和屬性中,但是,注意了,僅有一個bean匹配需要的結(jié)果時,自動裝配才可以生效。如果有多個bean匹配同一個結(jié)果,這種歧義性會阻礙Spring自動裝配屬性,構(gòu)造參數(shù)或方法參數(shù)。
大白話說一下,就如我們有一個甜片接口(Dessert)里面有一個好吃的方法(good)當我們只有一個餅干實現(xiàn)這個接口時,Spring容器會選擇餅干來裝配,但是還有一個蛋糕實現(xiàn)接口時,這個時候Spring就不知道去選擇哪個實現(xiàn)類來裝配了。代碼上!
(1)甜片的接口
package jinjin;
/**
*
* @author 雪飛oubai
* 甜點接口
*/
public interface Dessert {
public void good();
}
(2)有餅干實現(xiàn)這個接口
package jinjin;
import org.springframework.stereotype.Component;
/**
* @author 雪飛oubai
* 餅干類實現(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 {
}
運行結(jié)果

(5)再加一個蛋糕類實現(xiàn)接口
package jinjin;
import org.springframework.stereotype.Component;
/**
* @author 雪飛oubai
* 蛋糕類實現(xiàn)甜片接口
*/
@Component
public class Cake implements Dessert {
@Override
public void good() {
System.out.println("蛋糕好吃!");
}
}
(6)繼續(xù)運行看結(jié)果

報了NoUniqueBeanDefinitionException的異常。這就是自動裝配的歧義性
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java 使用簡單的demo實例告訴你優(yōu)化算法的強大
本篇文章介紹了,在java中使用簡單的demo實例告訴你優(yōu)化算法的強大。需要的朋友參考下2013-05-05
springboot oauth2實現(xiàn)單點登錄實例
我們見過的很多網(wǎng)站,容許使用第三方賬號登錄,oauth2是用來做三方登錄的,本文就詳細的介紹springboot oauth2實現(xiàn)單點登錄實例,具有一定的參考價值,感興趣的可以了解一下2022-01-01
關(guān)于Spring中@Value注解使用和源碼分析
通過深入分析@Value注解的使用和源碼,本文詳細解釋了Spring如何解析@Value注解并為屬性賦值,首先,Spring會解析并收集所有被@Value注解修飾的屬性,這一過程依賴于AutowiredAnnotationBeanPostProcessor類2024-11-11

