首页 > 其他分享 >使用@Autowired + Map 实现策略模式

使用@Autowired + Map 实现策略模式

时间:2024-03-11 09:56:21浏览次数:19  
标签:Map name Autowired getName 模式 import UserService public String

创建接口

public interface UserService {
    String getName();
}

创建多个类实现上面的接口

实现一

import com.boot.service.UserService;
import org.springframework.stereotype.Service;

@Service("zhangsan")
public class ZhangsanUserServiceImpl implements UserService {
    @Override
    public String getName() {
        return "My name is zhangsan.";
    }
}

实现二


import com.boot.service.UserService;
import org.springframework.stereotype.Service;

@Service("lisi")
public class LisiUserServiceImpl implements UserService {
    
    @Override
    public String getName() {
        return "Hi my name is lisi.";
    }
}

提供http请求接口

@RestController
@Slf4j
public class HelloWorldController {

   /**
     * map 的key:实例对象的名称,可以自己起,也可以用默认的类名
     * map 的value:实例对象
     */
    @Autowired
    private Map<String, UserService> userServiceMap;
    
    @GetMapping("userTest")
    public String getName(@RequestParam String name) {
        UserService userService = userServiceMap.get(name);
        String say = userService.getName();
        System.out.println(say);
        return say;
    }
}

调接口

GET http://localhost:8080/userTest?name=zhangsan 结果:My name is zhangsan.
GET http://localhost:8080/userTest?name=lisi  结果:Hi my name is lisi.

说明

在实现策略模式的时候,可以直接将类名起成策略的判断条件,这种不推荐。也可以另外维护一套策略与实现类的对应关系

标签:Map,name,Autowired,getName,模式,import,UserService,public,String
From: https://www.cnblogs.com/shareToAll/p/18065406

相关文章

  • CCE集群VPC网络模式下几种访问场景
    本文分享自华为云社区《【理解云容器网络】5-CCE集群VPC模型容器网络走线介绍》,作者:可以交个朋友。简介鉴于在CCE集群使用VPC网络模型,处理遇到的一些网络问题时,需要熟悉不同场景下数据包的流转过程,才能快速的解决问题。本文主要介绍CCE集群VPC网络模式下各种访问场景介绍。VPC......
  • Go 中的监视器模式与配置热更新
    Go中的监视器模式与配置热更新原创 波罗学 码途漫漫 2024-03-1108:03 上海 听全文上篇介绍GO的GUI库Fyne时,提到Fyne的数据绑定用到了监听器模式。本文就展开说下我对Go中监听器模式的理解和应用吧。监听器模式简介监听器模式,或称观察者模式,它主要涉及......
  • HashMap线程不安全实例(jdk1.7)
    一、前言jdk1.7中,以put()方法举例,线程不安全的一些情况:1,初始化HashMap的桶数组的时候,一个线程初始化了桶数组并插入了第一个元素,但是另一个线程不知道初始化好了,也执行了初始化的操作,清除了前面线程已经插入的元素;2,两个线程同时触发扩容,在翻转同个桶位上的链表时,链表形成环,类似......
  • 三、MyBatis基础配置之映射文件Mapper.xml(均为单表查询示例)
    一)动态if需求:多条件组合查询。  二)动态foreach需求:多值查询。  三)动态抽取......
  • 在Java中,HashMap中是用哪些方法来解决哈希冲突的?
    HashMap中调用hashCode()方法来计算hashCode。由于在Java中两个不同的对象可能有一样的hashCode,所以不同的键可能有一样hashCode,从而导致冲突的产生。采用链地址法解决冲突。HashMap底层是数组+链表+红黑树(JDK1.8)来实现的,根据key的hash值查找对应的位桶。1.当前索引数组为空,则......
  • 关于Flask中View function mapping is overwriting an existing endpoint function
    关于Flask中Viewfunctionmappingisoverwritinganexistingendpointfunction首次编辑:24/3/10/11:03最后编辑:24/3/10/11:57引子背景本来是在写个人网站,以前的代码中,几乎每个视图函数都有类似于:@app.route("/")defindex(): try: returnsend_file("index.html") e......
  • 08_桥接模式
    桥接模式是一种结构型设计模式,它将抽象和实现分离,使它们可以独立地变化。桥接模式通过将实现细节从抽象中分离出来,使得抽象和实现可以独立地进行扩展和修改。桥接模式有四个主要角色:抽象类(Abstraction):定义了抽象类的接口,并包含一个对实现类的引用。实现类接口(Implementor):定......
  • 07_适配器模式
    适配器模式是一种结构型设计模式,它通过将一个类的接口转换成客户端所期望的另一个接口,使得原本由于接口不兼容而不能一起工作的类能够协同工作。适配器模式有三个主要角色:目标接口(Target):定义了客户端所期望的接口。源接口(Adaptee):需要被适配的类或接口。适配器(Adapter):将......
  • STM32的3种启动模式
    STM32的3种启动模式STM32启动模式介绍各种模式介绍boot0=0Flashmemory启动方式启动地址:0x08000000是STM32内置的Flash,一般我们使用JTAG或者SWD模式下载程序时,就是下载到这个里面,重启后也直接从这启动程序。基本上都是采用这种模式。boot0=1;boot1=0System......
  • Map集合
    HashMap(由键决定特点):无序、不重复、无索引LinkedHashMap(由键决定特点):有序,不重复,无索引TreeMap(由键决定特点):按照大小默认排序升序、不重复、无索引常用方法importjava.util.Collection;importjava.util.HashMap;importjava.util.Map;importjava.util.Set;/**......