当前位置: 首页 > news >正文

网站关键词优化实验结果分析手机商城及手机价格

网站关键词优化实验结果分析,手机商城及手机价格,东莞优化网站制作,长沙网络营销哪家平台专业面试回答 Java 中区分 API 和 SPI#xff0c;通俗的讲#xff1a;API 和 SPI 都是相对的概念#xff0c;他们的差别只在语义上#xff0c;API 直接被应用开发人员使用#xff0c;SPI 被框架扩展人员使用。 API Application Programming Interface 大多数情况下#xff…面试回答 Java 中区分 API 和 SPI通俗的讲API 和 SPI 都是相对的概念他们的差别只在语义上API 直接被应用开发人员使用SPI 被框架扩展人员使用。 API Application Programming Interface 大多数情况下都是实现方来制定接口并完成对接口的不同实现调用方仅仅依赖却无权选择不同实现。 SPI Service Provider Interface 而如果是调用方来制定接口实现方来针对接口实现不同的实现。调用方来选择自己需要的实现方。 知识扩展 如何定义一个 SPI 步骤1、定义一组接口假设是 com.chiyi.test.IShout,并写出接口的一个或多个实现假设是 com.chiyi.test.Dog、com.chiyi.test.Cat。 public interface IShout {void shout(); }public class Dog implements IShout{Overridepublic void shout() {System.out.println(wang wang);} } public class Cat implements IShout{Overridepublic void shout() {System.out.println(miao miao);} } 步骤2、在 src/main/resources/ 下建立 /META-INF/services目录新增一个以接口命名的文件com.chiyi.test.IShout 文件内容是要应用的实现类这里是 com.chiyi.test.Dog和com.chiyi.test.Cat,每行一个类。 com.chiyi.test.Dog com.chiyi.test.Cat 步骤3、使用 ServiceLoader 来加载配置文件中指定的实现。 public class Main {public static void main(String[] args) {ServiceLoaderIShout shoutsServiceLoader.load(IShout.class);for(IShout s:shouts){s.shout();}} } 代码输出 wang wang miao miao SPI 的实现原理 看 ServiceLoader 类的签名类的成员变量 public final class ServiceLoaderSimplements IterableS {private static final String PREFIX META-INF/services/;// 代表被加载的类或者接口private final ClassS service;// 用于定位加载和实例化 providers 的类加载器private final ClassLoader loader;// 创建 ServiceLoader 时采用的访问控制上下文private final AccessControlContext acc;// 缓存 providers按实例化的顺序排列private LinkedHashMapString,S providers new LinkedHashMap();// 懒查找迭代器private LazyIterator lookupIterator;······ } 参考具体源码梳理了一下实现的流程如下 应用程序调用 ServiceLoader.load 方法ServiceLoader.load方法内先创建一个新的 ServiceLoader并实例化该类中的成员变量包括 loader(ClassLoader 类型类加载器)acc(AccessControlContext 类型访问控制器)providers(LinkedHashMap 类型用于缓存加载成功的类)lookupIterator(实现迭代器功能) 应用程序通过迭代器接口获取对象实例 ServiceLoader 先判断成员变量 providers 对象中LinkedHashMap 类型是否有缓存实例对象如果有缓存直接返回。如果没有缓存执行类的装载 读取 META-INF/services/ 下的配置文件获得所有能被实例化的类的名称通过反射方法 Class.forName() 加载类对象并用 instance() 方法将类实例化把实例化的类缓存到 providers 对象中LinkedHashMap 类型然后返回实例对象 SPI 的应用场景 概括地说适用于调用者根据实际使用需要启用、扩展、或者替换框架的实现策略。 比如常见的例子 数据库驱动加载接口实现类的加载JDBC 加载不同类型数据库的驱动日志门面接口实现类加载SLF4J 加载不同提供商的日志实现类 Spring Spring 中大量使用了 SPI比如对 servlet3.0 规范对 ServletContainerInitializer 的实现、自动类型转换 Type Conversion SPIConverter SPI、Formatter SPI等 Dubbo Dubbo 中也大量使用 SPI的方式实现框架的扩展不过它对 java 提供的原生 SPI 做了封装允许用户扩展实现 Filter 接口。
http://www.hkea.cn/news/14392304/

相关文章:

  • 做个网站app吗韩国还有出线的可能
  • xp系统中做网站服务器上海自适应网站
  • 做蛋糕有哪些网站呼和浩特建设工程信息网站
  • 咋样建设网站专业网站建设科技公司
  • wordpress网站采集插件专门做网站的公司 南阳
  • 做网站诊断步骤关于文化建设网站
  • 济宁嘉祥网站建设哪个网站做自媒体比较好
  • 做百度推广需要有自己的网站吗华秋电子商城
  • 浅谈高校网站群的建设群晖wordpress外网
  • 做更好的自己 网站网站设计就业岗位分析
  • wps可以做网站吗手机怎么做软件开发
  • 网站维护的方式有哪几种网址缩短链接
  • 网站流量查询网站统计查询校园网站建设成本
  • 免费的韩国网站服务器wordpress主题底部版权
  • 网站规划的案例好网站分享
  • 乐清手机网站建设人力资源网官网
  • 汕头网站关键词推广去哪里找空间做网站
  • 国外服务器做网站德阳定制建站网站建设制作
  • 锚文本外链网站找人做一个网站多少钱
  • 做网站一个月能挣多少钱网站页眉尺寸
  • 辽阳网站建设58网站页面框架设计
  • 做网页的网站素材wordpress搭建子网站
  • 网站备案有时间吗网络服务商英文简称
  • 游仙建设局官方网站做百度微信小程序都有哪些网站
  • 快递网站怎么做的延安做网站的公司电话
  • 网站建设及推广枣强知乎营销软件
  • 如何建立网站做微商xunsearch做搜索网站
  • 肥东建设局网站网站模板如何使用 如何修改吗
  • 跨境电商 网站开发邮件格式模板
  • 视频网站开发分析深圳华强北今晚