SpringBoot一个接口多个实现类的调用方式总结

 更新时间:2024年01月04日 09:57:13   作者:yy_csdn1314  
这篇文章主要介绍了SpringBoot一个接口多个实现类的调用方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

1、指定限定名注入实现类

1.1、定义一个接口

public interface AnimalService {
    public void sound();
}

1.2、创建多个实现类

@Service("s1")
public class CatService implements AnimalService {
    @Override
    public void sound() {
        System.out.println("喵喵喵");
    }
}
@Service()
public class DogService implements AnimalService {
    @Override
    public void sound() {
        System.out.println("汪汪汪");
    }
}
@Service("s3")
public class CattleService implements AnimalService {
    @Override
    public void sound() {
        System.out.println("汪汪汪");
    }
}

1.3、指定限定名注入实现类

@RunWith(SpringRunner.class)
@SpringBootTest
public class Main {
    @Autowired
    @Qualifier(value = "s1")
    AnimalService animalService1;    //正常启动
 
    //没有指定bean注入名字的,使用该类首字符小写的bean的名字
    //使用默认的
    @Resource(name = "dogService")
    AnimalService animalService2;    //正常启动
 
    //通过@Resource注入,根据@Service指定的名称区分
    @Resource(name = "s3")
    AnimalService animalService3;    //正常启动
 
    @Test
   public void test1() {
        animalService1.sound();
 
        animalService2.sound();
 
        animalService3.sound();     
    }
}

2、Map名注入实现类

2.1、定义一个接口

public interface AnimalService {
    public void sound();
}

2.2、创建多个实现类

@Service("s1")
public class CatService implements AnimalService {
    @Override
    public void sound() {
        System.out.println("喵喵喵");
    }
}

2.3、枚举

public enum AnimalTypeEnum {
    DOG(1, "狗狗", "dogService"),
    CAT(2, "猫咪", "catService");
 
    public Integer code;
    public String msg;
    public String service;
 
    public static AnimalTypeEnum getAnimalTypeEnum (Integer code) {
        return (AnimalTypeEnum )Arrays.stream(values()).filter((item) -> {
            return item.code.equals(code);
        }).findFirst().orElseThrow(() -> {
            return new BusinessException("biz animal type is not exist");
        });
    }
 
    private AnimalTypeEnum (final Integer code, final String msg, final String service) {
        this.code = code;
        this.msg = msg;
        this.service = service;
    }
}

2.4、指定限定名注入实现类

@RunWith(SpringRunner.class)
@SpringBootTest
public class Main {
    @Autowired
    Map<String, AnimalService> animalServiceMap;
 
    @Test
   public void test1() {  
        String service = AnimalTypeEnum.getAnimalTypeEnum(1).service;
        AnimalService animalService = animalServiceMap.get(service);
        animalService.sound();
    }
}

以上就是SpringBoot一个接口多个实现类的调用方式的详细内容,更多关于SpringBoot一个接口多个实现类的资料请关注脚本之家其它相关文章!

相关文章

  • Java四个线程常用函数超全使用详解

    Java四个线程常用函数超全使用详解

    这篇文章主要为大家介绍了线程中常用的四个函数:wait()、join()、sleep() 和 yield(),以及这四个函数的使用方法和相互之间的区别,需要的可以参考一下
    2022-03-03
  • 解决IntelliJ IDEA创建spring boot无法连接http://start.spring.io/问题

    解决IntelliJ IDEA创建spring boot无法连接http://start.spring.io/问题

    这篇文章主要介绍了解决IntelliJ IDEA创建spring boot无法连接http://start.spring.io/问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • Java获取HttpServletRequest的三种方法详解

    Java获取HttpServletRequest的三种方法详解

    这篇文章主要介绍了Java获取HttpServletRequest的三种方法详解,是一个接口,全限定名称为Jakarta.Serclet.http.HttpServletRequest
    HttpServletRequest接口是Servlet规范的一员,需要的朋友可以参考下
    2023-11-11
  • SpringBoot集成EasyExcel实现百万级别的数据导入导出实践指南

    SpringBoot集成EasyExcel实现百万级别的数据导入导出实践指南

    本文将基于开源项目 springboot-easyexcel-batch 进行解析与扩展,手把手教大家如何在 Spring Boot 2.2.1 中集成 Alibaba EasyExcel,轻松实现百万级数据的导入与导出
    2025-08-08
  • MyBatis Plus 入门使用详细教程

    MyBatis Plus 入门使用详细教程

    这篇文章主要介绍了MyBatis Plus 入门使用详细教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • java递归实现复制一个文件夹下所有文件功能

    java递归实现复制一个文件夹下所有文件功能

    这篇文章主要介绍了java递归实现复制一个文件夹下所有文件功能n次,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • 在MyBatis中进行分页查询的两种方法详解

    在MyBatis中进行分页查询的两种方法详解

    在 MyBatis 中进行分页查询通常有两种方法:一种是通过手动拼接 LIMIT 和 OFFSET,另一种是使用 MyBatis 插件(如 MyBatis-PageHelper)来自动处理分页逻辑,下面分别介绍这两种方法,需要的朋友可以参考下
    2025-11-11
  • java 多线程饥饿现象的问题解决方法

    java 多线程饥饿现象的问题解决方法

    这篇文章主要介绍了java 多线程饥饿现象的问题解决方法的相关资料,需要的朋友可以参考下
    2017-06-06
  • SpringCloud分布式事务Seata部署和集成过程

    SpringCloud分布式事务Seata部署和集成过程

    这篇文章主要介绍了SpringCloud分布式事务Seata部署和集成过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-10-10
  • 利用Java快速查找21位花朵数示例代码

    利用Java快速查找21位花朵数示例代码

    这篇文章主要给大家介绍了关于利用Java快速查找21位花朵数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习,需要的朋友们下面随着小编来一起学习学习吧。
    2017-10-10

最新评论