千家信息网

spring使用策略模式如何实现多种场景登录方式

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章给大家介绍spring使用策略模式如何实现多种场景登录方式,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。@Autowired注解可以帮我们自动注入我们想要的 Bean。如
千家信息网最后更新 2026年11月01日spring使用策略模式如何实现多种场景登录方式

这篇文章给大家介绍spring使用策略模式如何实现多种场景登录方式,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

@Autowired注解可以帮我们自动注入我们想要的 Bean。
如果只是简单使用@Autowired会遇到spring IOC容器中一个接口有多个实现的情况,spring无法识别具体的实现类,如果不是策略模式,我们可以进行具体的指定@Qualifier和@primary来避免bean冲突的情况。但在策略模式中是不行的。
而除了这个基本功能之外, @Autowired 还有更加强大的功能,还可以注入指定类型的数组,List/Set 集合,甚至还可以是 Map 对象。
为每个具体的实现类添加了一个编号,方便识别,具体可以根据场景选择,这里只是模拟。

登录service

@Servicepublic class LoginService {    @Autowired    Set loginSet;//使用了Set     Map loginMap;    public User login(User userLogin) {        Login login=loginMap.get(userLogin.getChannelNo());        return login.login(userLogin);    }    @PostConstruct    public void init() {        loginMap = new HashMap<>();        for (Login login : loginSet) {            loginMap.put(login.channel(), login);        }    }}

源码策略接口

@Componentpublic interface Login {    User login(User userLogin);    Integer channel();}

具体实现类---用户密码登录

@Componentpublic class PasswordLogin implements Login {    @Autowired    LoginDao loginDao;    @Override    public User login(User userLogin) {        return loginDao.PasswordLogin(userLogin.getUsername(),userLogin.getPassword());    }    @Override    public Integer channel() {        return 2;    }}

具体实现类---邮箱登录

@Componentpublic class EmailLogin implements Login {    @Autowired    LoginDao loginDao;    @Override    public User login(User userLogin) {        return loginDao.EmailLogin(userLogin.getEmail(),userLogin.getPassword());    }    @Override    public Integer channel() {        return 3;    }}

具体实现类---邮箱登录

@Componentpublic class PhoneLogin implements Login {    @Autowired    LoginDao loginDao;    @Override    public User login(User userLogin) {        return loginDao.PhoneLogin(userLogin.getPhone(),userLogin.getPassword());    }    @Override    public Integer channel() {        return 1;    }}

简单模拟登录SQL

@Mapper@Repositorypublic interface LoginDao {    @Select("select * from user where phone=#{phone} and password=#{password}")    User PhoneLogin(String phone,String password);    @Select("select * from user where username=#{username} and password=#{password}")    User PasswordLogin(String username,String password);    @Select("select * from user where email=#{email} and password=#{password}")    User EmailLogin(String email,String password);}

关于spring使用策略模式如何实现多种场景登录方式就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

0