栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

3、spring boot2x bean多个实现类注入

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

3、spring boot2x bean多个实现类注入

创建接口IOne和实现接口IOne的类OneImpl和OneTwoImpl

通过@Autowired注解,它会根据类型或者名称找到对应的Bean进行注入,如果不能区别就会报错

IOne 接口如下

package com.sboot.pr.service;

public interface IOne {

	public String getInfo();
}

OneImpl类如下

package com.sboot.pr.service.impl;

import org.springframework.stereotype.Component;

import com.sboot.pr.service.IOne;


@Component
public class oneImpl implements IOne {

	@Override
	public String getInfo() {
		
		return "OneImpl";
		
	}

}

OneTwoImpl如下

package com.sboot.pr.service.impl;

import org.springframework.stereotype.Component;

import com.sboot.pr.service.IOne;


@Component
public class oneTwoImpl implements IOne {

	@Override
	public String getInfo() {
		// TODO Auto-generated method stub
		return "OneTwoImpl";
	}

}

注入Bean,如果@Autowired 对应Bean不是唯一则会报错

package com.sboot.pr.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import com.sboot.pr.bean.BeanPOJO;
import com.sboot.pr.bean.ComponentPOJO;
import com.sboot.pr.bean.ComponentScanPOJO;
import com.sboot.pr.service.IOne;
import com.sboot.pr.service.impl.Two;



@RestController
public class TestController {
	

	@Autowired
	private IOne one;
	
	  @GetMapping("/boot/getOneInfo")
		public String getoneInfo() {
	    	return one.getInfo();
	    }
}

报错:Field one in com.sboot.pr.controller.TestController required a single bean, but 2 were found:
    - oneImpl: defined in file [F:projecteclipse-workspacesboottargetclassescomsbootprserviceimplOneImpl.class]
    - oneTwoImpl

解决方法

第一种方法:添加@Primary 注解,修改优先权的作用,比如在OneTwoImpl中添加注解,再次启动项目进行测试。

@Component
@Primary
public class oneTwoImpl implements IOne {

启动项目进行访问

http://localhost:1111/boot/getOneInfo

第二种方法:添加@Qualifier注解与@Autowired 组合,则会通过类型和名称去找到Bean,可以消除歧义性

@Autowired
@Qualifier("oneImpl")
 private IOne one;

启动项目进行访问


  第三种方法:通过@Autowired注解,它会根据类型或者名称找到对应的Bean进行注入

     @Autowired
    private IOne oneTwoImpl;
    启动项目进行访问

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/459377.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号