这篇文章主要介绍了弹簧自动装配的二义性实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
1。我们知道可以用春天的自动装配(@ autowired)将Bean应用注入到构造参数和属性中,但是,注意了,仅有一个Bean匹配需要的结果时,自动装配才可以生效。如果有多个Bean匹配同一个结果,这种歧义性会阻碍弹簧自动装配属性,构造参数或方法参数。
大白话说一下,就如我们有一个甜片接口(甜点)里面有一个好吃的方法(好)当我们只有一个饼干实现这个接口时,春容器会选择饼干来装配,但是还有一个蛋糕实现接口时,这个时候春天就不知道去选择哪个实现类来装配了。代码上!
(1)甜片的接口
包金近;/* * * * @author雪飞oubai *甜点接口 */公共接口甜点{ 公共空间好(); }
(2)有饼干实现这个接口
包金近; 进口org.springframework.stereotype.Component;/* * * @author雪飞oubai *饼干类实现接口 */@ component 公共类饼干实现甜点{ @Override 公共空间好(){ System.out.println(“饼干好吃!”); } }
(3)测试类,使用@ autowired来自动装配
包金近; 进口org.junit.Test; 进口org.junit.runner.RunWith; 进口org.springframework.beans.factory.annotation.Autowired; 进口org.springframework.test.context.ContextConfiguration; 进口org.springframework.test.context.junit4.SpringJUnit4ClassRunner;/* * * @author雪飞oubai *测试一下 */@RunWith (SpringJUnit4ClassRunner.class) @ContextConfiguration(类=ConfigTest.class) 公开课CommTest { @ autowired 私人甜品甜点; @Test 公共空白测试(){ dessert.good (); } }
(4) java配置类
包金近; 进口org.springframework.context.annotation.ComponentScan; 进口org.springframework.context.annotation.Configuration;/* * * @author雪飞oubai * java配置类 */@ configuration @ComponentScan 公开课ConfigTest { }
运行结果
(5)再加一个蛋糕类实现接口
包金近; 进口org.springframework.stereotype.Component;/* * * @author雪飞oubai *蛋糕类实现甜片接口 */@ component 公共类蛋糕实现甜点{ @Override 公共空间好(){ System.out.println(“蛋糕好吃!”); } }
(6)继续运行看结果
报了NoUniqueBeanDefinitionException的异常。这就是自动装配的歧义性
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。