分享

springboot一个接口多个实现类的调用方式

 wwq图书世界 2024-01-23 发布于山东

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

1.1、定义一个接口

  1. public interface AnimalService {
  2. public void sound();
  3. }

1.2、创建多个实现类

  1. @Service("s1")
  2. public class CatService implements AnimalService {
  3. @Override
  4. public void sound() {
  5. System.out.println("喵喵喵");
  6. }
  7. }
  1. @Service()
  2. public class DogService implements AnimalService {
  3. @Override
  4. public void sound() {
  5. System.out.println("汪汪汪");
  6. }
  7. }
  1. @Service("s3")
  2. public class CattleService implements AnimalService {
  3. @Override
  4. public void sound() {
  5. System.out.println("汪汪汪");
  6. }
  7. }

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

  1. @RunWith(SpringRunner.class)
  2. @SpringBootTest
  3. public class Main {
  4. @Autowired
  5. @Qualifier(value = "s1")
  6. AnimalService animalService1; //正常启动
  7. //没有指定bean注入名字的,使用该类首字符小写的bean的名字
  8. //使用默认的
  9. @Resource(name = "dogService")
  10. AnimalService animalService2; //正常启动
  11. //通过@Resource注入,根据@Service指定的名称区分
  12. @Resource(name = "s3")
  13. AnimalService animalService3; //正常启动
  14. @Test
  15. public void test1() {
  16. animalService1.sound();
  17. animalService2.sound();
  18. animalService3.sound();
  19. }
  20. }

 2、Map名注入实现类

2.1、定义一个接口

  1. public interface AnimalService {
  2. public void sound();
  3. }

2.2、创建多个实现类

  1. @Service("s1")
  2. public class CatService implements AnimalService {
  3. @Override
  4. public void sound() {
  5. System.out.println("喵喵喵");
  6. }
  7. }
  1. @Service()
  2. public class DogService implements AnimalService {
  3. @Override
  4. public void sound() {
  5. System.out.println("汪汪汪");
  6. }
  7. }

2.3、枚举

  1. public enum AnimalTypeEnum {
  2. DOG(1, "狗狗", "dogService"),
  3. CAT(2, "猫咪", "catService");
  4. public Integer code;
  5. public String msg;
  6. public String service;
  7. public static AnimalTypeEnum getAnimalTypeEnum (Integer code) {
  8. return (AnimalTypeEnum )Arrays.stream(values()).filter((item) -> {
  9. return item.code.equals(code);
  10. }).findFirst().orElseThrow(() -> {
  11. return new BusinessException("biz animal type is not exist");
  12. });
  13. }
  14. private AnimalTypeEnum (final Integer code, final String msg, final String service) {
  15. this.code = code;
  16. this.msg = msg;
  17. this.service = service;
  18. }
  19. }

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

  1. @RunWith(SpringRunner.class)
  2. @SpringBootTest
  3. public class Main {
  4. @Autowired
  5. Map<String, AnimalService> animalServiceMap;
  6. @Test
  7. public void test1() {
  8. String service = AnimalTypeEnum.getAnimalTypeEnum(1).service;
  9. AnimalService animalService = animalServiceMap.get(service);
  10. animalService.sound();
  11. }
  12. }

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约