Spring系列第10篇:primary可以解决什么问题?

本文介绍了Spring中遇到多个bean实现同一接口时,如何通过`primary`属性解决NoUniqueBeanDefinitionException异常。通过示例展示了在没有设置`primary`时,从容器获取bean导致的异常情况,以及启用`primary`后的解决方案。内容包括setter注入和直接获取bean两种场景。
摘要由CSDN通过智能技术生成

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: 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值