public static class ServiceA implements IService{} //@2
public static class ServiceB implements IService{} //@3
}
上面代码很简单,@1:定义了一个接口IService,@2和@3创建了两个类都实现了IService接口。
下面我们通过spring来定义ServiceA和ServiceB两个bean,配置文件(normalBean.xml)如下:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns=“http://www.springframework.org/schema/beans”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
来个测试用例来从spring容器中获取上面定义的bean对象,如下:
package com.javacode2018.lesson001.demo8;
import com.javacode2018.lesson001.demo5.IocUtils;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* 公众号:路人甲Java,工作10年的前阿里P7分享Java、算法、数据库方面的技术干货!坚信用技术改变命运,让家人过上更体面的生活!
- bean元素的primary属性可以解决什么问题?
*/
public class PrimaryTest {
@Test
public void normalBean() {
String beanXml = “classpath:/com/javacode2018/lesson001/demo8/normalBean.xml”;
ClassPathXmlApplicationContext context = IocUtils.context(beanXml);
//下面我们通过spring容器的T getBean(Class requiredType)方法获取容器中对应的bean
NormalBean.IService service = context.getBean(NormalBean.IService.class); //@1
System.out.println(service);
}
}
注意@1的代码,从spring容器中在容器中查找NormalBean.IService.class类型的bean对象,我们来运行一下看看效果,部分输出如下:
org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type ‘com.javacode2018.lesson001.demo8.NormalBean$IService’ available: expected single matching bean but found 2: