zoukankan      html  css  js  c++  java
  • 谈谈服务提供框架

    参考:https://blog.csdn.net/zl3450341/article/details/7227197

    组件说明
    服务接口(Service Interface ) 由系统制定的服务标准,需要提供者实现
    提供者注册API(Provider Registration API) 系统用来注册提供者的实现,让客户端访问
    服务访问API(Service Access API) 客户端用来获取服务的实例。
    服务访问API一般允许但是不要求客户端指定某种选择提供者的条件,如果没有这样的规定,API就会返回默认实现的一个实例
    服务访问API是“灵活的静态工厂”,它构成了SPF的基础
    服务提供者接口(Service Provider Interface) 由系统制定的提供者接口(可选),负责创建其服务实现的实例

    Code: 以Salt举例

    1. 定义Salt服务接口

    //service interface
    public interface Salt {
        void addIodine();
    }

    包括各种方法。

    2. Salt服务提供者注册api

    可以理解为将实现Salt服务的第三方加入到候选列表中。这一步决定是否需要实现第3步。如果没有定义Salt服务提供者接口,则可以直接注册名称,之后在第4步中通过反射的方式获得服务。

    public class SaltManager {
    
        private static final Map<String, SaltProvider> providers = new ConcurrentHashMap<String,SaltProvider>();
    
        //provider registration api
        public static void registerSaltProvider(String name, SaltProvider provider){
            providers.put(name, provider);
        }
        //service access api
        public static Salt getSalt(String name){
            SaltProvider provider = providers.get(name);
            return provider.getSalt();
        }
    }

    3. (可选)定义Salt服务提供者接口

    //service provider interface
    public interface SaltProvider {
        Salt getSalt();
    }

    4. Salt服务访问api

    由第2步的代码可以看到Salt服务访问api - getSalt(),具体就是到Map中去找第三方的实现并获得服务。

    //service access api
        public static Salt getSalt(String name){
            SaltProvider provider = providers.get(name);
            return provider.getSalt();
        }

     代码

     对于服务标准制定者,

      1. 制定服务标准
      2. 实现类似于字典的服务管理器,以及注册api
    对于服务实现厂商(第三方),
      1. 实现服务标准
      2. 自己注册到服务管理器
    对最终用户,
      1. 知道如何用即可

    JDBC, JMS同样采用了服务提供者框架,后续再深入研究。

  • 相关阅读:
    Linux 提权-依赖 Exp 篇
    s-cms学校建站重装漏洞
    极致CMS建站系统后台GETSHELL
    泛微weaver_oa filebrowser.jsp 任意目录遍历
    泛微oa系统com.eweaver.base.DataAction文件sql参数sql注入
    Supervisord rce(CVE-2017-11610)
    docker安装
    互联网测试开发面试题集锦【转】
    测试面试常见面试题汇总一
    Python操作MongoDB文档数据库
  • 原文地址:https://www.cnblogs.com/hello-yz/p/9829710.html
Copyright © 2011-2022 走看看