spi

Dubbo 源码分析

∥☆過路亽.° 提交于 2020-04-05 18:13:49
Dubbo SPI 系列文章 浅谈 Java SPI Dubbo SPI 使用方法(一)- 扩展点自动包装 Dubbo SPI 使用方法(二)- 扩展点自适应 Dubbo SPI 使用方法(三)- 扩展点自动装配 Dubbo 源码分析 - Dubbo SPI 在 Protocol 层 的应用 Dubbo 源码分析 - Dubbo SPI 通过 getExtension 获取扩展点实现类对象 前言 上一篇文章 Dubbo 源码分析 - Dubbo SPI 获取扩展点实现类对象 分析了 Dubbo SPI 通过 getExtension(String name) 如何获取扩展点实现类对象, 本文接着通过剖析 Dubbo 源码的方式看一下 getAdaptiveExtension() 方法是如何获取自适应扩展点实例的. 正文 1. ExtensionLoader 部分属性 // 1. 缓存的自适应扩展点实例 private final Holder<Object> cachedAdaptiveInstance = new Holder<>(); // 2. 自适应扩展点实现类 private volatile Class<?> cachedAdaptiveClass = null; 2. ExtensionLoader#getAdaptiveExtension() 从自适应扩展点实例

物联网ram继承PSRAM的积极特性

两盒软妹~` 提交于 2020-04-05 15:06:31
IoT RAM即是物联网RAM,是基于PSRAM技术的技术,它增加了其他接口选项,例如大多数MCU/FPGA使用的低引脚数Flash SPI接口,以及SoC需要的易于使用的系统级封装(SiP)选项比内部SRAM更大的内存。 物联网 ram 继承了PSRAM的积极特性-结合了一个相对简单的SRAM接口和DRAM存储单元技术,该接口简化了产品设计,与SRAM相比降低了产品成本(降低了10倍),并且与SRAM相比具有更高的密度10倍IoT RAM还具有低延迟–允许从超低功耗模式快速唤醒和快速上电时间;也可以从待机模式瞬时唤醒;IoT RAM还允许超低电流消耗–通常<0.15至0。5uA/Mb取决于密度。密度越高,固定功率开销趋势就越低。 图1 IoT RAM在需要扩展内存的IoT/嵌入式应用程序中占据了最佳中间地带 由于 PSRAM 解决了与IoT/嵌入式应用中类似的设计约束,因此可以在功能电话产品中找到一席之地。物联网RAM基于PSRAM并通过低引脚数SPI或SiP选项进行接口,是需要性能,低成本和响应性的基于MCU/SoC/FPGA的功率受限解决方案的理想选择。利用低引脚数的SPI接口,可以进一步提高基于MCU/SoC/FPGA的设备的系统成本效率。 AP Memory 具有成本效益的IoT RAM解决方案与大多数MCU/SoC/FPGA随附的SPI接口兼容,包括Quad

SPI机制

最后都变了- 提交于 2020-04-02 09:24:35
一、什么是SPI SPI ,全称为 Service Provider Interface,是一种服务发现机制。它通过在ClassPath路径下的META-INF/services文件夹查找文件,自动加载文件里所定义的类。 这一机制为很多框架扩展提供了可能,比如在Dubbo、JDBC中都使用到了SPI机制。我们先通过一个很简单的例子来看下它是怎么用的。 1、小例子 首先,我们需要定义一个接口,SPIService package com.viewscenes.netsupervisor.spi; public interface SPIService { void execute(); } 然后,定义两个实现类,没别的意思,只输入一句话。 package com.viewscenes.netsupervisor.spi; public class SpiImpl1 implements SPIService{ public void execute() { System.out.println("SpiImpl1.execute()"); } } ----------------------我是乖巧的分割线---------------------- package com.viewscenes.netsupervisor.spi; public class SpiImpl2

宏旺半导体科普SPI NAND Flash和SPI NOR Flash的区别

为君一笑 提交于 2020-03-27 19:01:14
我们在购买电子产品时,常常听到FLASH闪存这个词。但对于基础小白来说,可能常常搞不清楚SPI Flash、Nand Flash、Nor Flash等都是指什么,今天宏旺半导体就跟大家通俗易懂地讲解一下。 首先,我们了解一下Flash闪存本身,它则是一种非易失性存储,在没有电流供应的条件下也能够长久地保持数据,其存储特性相当于硬盘,这项特性正是闪存得以成为各类便携型数字设备的存储介质的基础。Flash按照内部存储结构的不同,可以分为两种:Nor Flash和Nand Flash。 宏旺半导体打个比方说,Nor Flash更像内存,有独立的地址线和数据线,但价格比较贵,容量比较小;而NAND型更像硬盘,地址线和数据线是共用的I/O线,类似硬盘的所有信息都通过一条硬盘线传送一般,而且NAND的成本较NOR来说很低,而容量却大很多。 因此,NOR型闪存比较适合频繁随机读写的场合,通常用于存储程序代码并直接在闪存内运行,手机就是使用NOR型闪存的大户,所以手机的“内存”容量通常不大;NAND型闪存主要用来存储资料,我们常用的闪存产品,如闪存盘、数码存储卡都是用NAND型闪存。 首先,SPI是指一种通信接口。那么严格的来说SPI Flash是一种使用SPI通信的Flash,即,可能指NOR也可能是NAND。但现在大部分情况默认下人们说的SPI Flash指的是SPI Nor Flash

Dubbo SPI 使用方法(二)- 扩展点自适应

元气小坏坏 提交于 2020-03-27 17:31:56
3 月,跳不动了?>>> 开篇 上一篇讲到了 Dubbo SPI 使用方法(1) - 扩展点自动包装 。 本文接着讲 Dubbo SPI - 扩展点自适应。 正文 大纲 扩展点自适应介绍 @Adaptive 注解使用方法 作用在类上 作用在方法上 1. 扩展点自适应 ExtensionLoader 注入的依赖扩展点是一个 Adaptive 实例,直到扩展点方法执行时才决定调用是哪一个扩展点实现。 Dubbo 使用 URL 对象(包含了Key-Value)传递配置信息。 扩展点方法调用会有 URL 参数(或是参数有URL成员)这样依赖的扩展点也可以从URL拿到配置信息,所有的扩展点自己定好配置的 Key 后,配置信息从 URL 上从最外层传入。URL在配置传递上即是一条总线。 上面摘自官网的一段介绍。 划重点: 扩展方法中有 URL 参数 也可以是包含 URL 成员的参数 直到扩展点方法执行时,才决定调用哪个扩展点实现 跟 扩展点自动包装 的区别 通过 URL 传递配置信息 通过 URL 中的参数,决定调用哪个扩展类实现 如果还是不好理解,就继续看下面的案例。 2. @Adaptive 注解 要想实现 扩展点自适应 ,需要借助 @Adaptive 注解,该注解可以作用在两个地方: 扩展实现类上 在类上,表示该类是一个扩展类,不需要生成代理直接用即可; 扩展接口方法上

Dubbo SPI 使用方法(一)

我怕爱的太早我们不能终老 提交于 2020-03-26 00:20:28
3 月,跳不动了?>>> 开篇 前面有说到 Java SPI 的介绍与使用方法 , 而本篇要说的 Dubbo SPI 是基于 Java SPI 的一个升级与改造(改善了部分缺点,增加了几个新玩法)。具体内容可以去看官网 Dubbo-SPI 部分 。 本文主要来讲下 Dubbo SPI 的部分使用方法。 另外,后续文章会补齐 Dubbo SPI 的其他用法以及 Dubbo SPI 部分的源码解析。 当然 官网 也有 Dubbo SPI 的使用说明与源码导读,可以自行选择。 正文 Dubbo SPI 的使用方法具体分为以下部分: 基本使用 扩展点自动包装 扩展点自适应 扩展点自动装配 扩展点自动激活 本文先来介绍前两种使用方法,建议先看下 Java SPI 的介绍与使用方法 ,了解下 SPI 的机制及用途。 1. 基本使用 从这点来看,Dubbo SPI 从使用上与 JAVA SPI 并无很大差异。 主要区别在于: JDK 标准的 SPI 会一次性实例化扩展点所有实现,如果有扩展实现初始化很耗时,但如果没用上也加载,会很浪费资源。 而 Dubbo SPI 可以选择性实例化某个实现。 下面来看下写法上的差别,具体代码如下: 1.1 定义一个接口 // 差别一:Dubbo 需要 SPI 注解 @SPI public interface HelloService { void

Dubbo的SPI机制

半世苍凉 提交于 2020-03-25 08:41:46
SPI 全称为 Service Provider Interface,是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。正因此特性,我们可以很容易的通过 SPI 机制为我们的程序提供拓展功能。SPI 机制在第三方框架中也有所应用,比如 Dubbo 就是通过 SPI 机制加载所有的组件。不过,Dubbo 并未使用 Java 原生的 SPI 机制,而是对其进行了增强,使其能够更好的满足需求。在 Dubbo 中,SPI 是一个非常重要的模块。 Dubbo SPI的改进 Dubbo 的扩展点加载从 JDK 标准的 SPI (Service Provider Interface) 扩展点发现机制加强而来。 Dubbo 改进了 JDK 标准的 SPI 的以下问题: DK 标准的 SPI 会一次性实例化扩展点所有实现,如果有扩展实现初始化很耗时,但如果没用上也加载,会很浪费资源。 如果扩展点加载失败,连扩展点的名称都拿不到了。比如:JDK 标准的 ScriptEngine,通过 getName() 获取脚本类型的名称,但如果 RubyScriptEngine 因为所依赖的 jruby.jar 不存在,导致 RubyScriptEngine 类加载失败,这个失败原因被吃掉了,和 ruby

Java类加载器ClassLoader总结

走远了吗. 提交于 2020-03-22 14:36:08
3 月,跳不动了?>>> JAVA类装载方式,有两种: 1.隐式装载, 程序在运行过程中当碰到通过new 等方式生成对象时,隐式调用类装载器加载对应的类到jvm中。 2.显式装载, 通过class.forname()等方法,显式加载需要的类 类加载的动态性体现: 一个应用程序总是由n多个类组成,Java程序启动时,并不是一次把所有的类全部加载后再运行,它总是先把保证程序运行的基础类一次性加载到jvm中,其它类等到jvm用到的时候再加载,这样的好处是节省了内存的开销,因为java最早就是为嵌入式系统而设计的,内存宝贵,这是一种可以理解的机制,而用到时再加载这也是java动态性的一种体现 java类装载器 JDK 默认提供了如下几种ClassLoader Bootstrp loader Bootstrp加载器是用C++语言写的,它是在Java虚拟机启动后初始化的,它主要负责加载 %JAVA_HOME%/jre/lib , -Xbootclasspath 参数指定的路径以及 %JAVA_HOME%/jre/classes 中的类。 ExtClassLoader Bootstrp loader加载ExtClassLoader,并且将ExtClassLoader的父加载器设置为Bootstrp loader.ExtClassLoader是用Java写的,具体来说就是 sun.misc

浅谈 Java SPI 机制

戏子无情 提交于 2020-03-22 14:34:08
3 月,跳不动了?>>> 开篇 本文主要谈一下 Java SPI(Service Provider Interface) ,因为最近在看 Dubbo 的相关内容,其中涉及到了 一个概念- Dubbo SPI , 最后又牵扯出来了 JAVA SPI, 所以先从 Java SPI 开整。 正文 平常学习一个知识点,我们的常规做法是: 是什么 有什么用 怎么用 这次我们倒着做,先不谈什么是 SPI 及其作用,来看下如何使用。 使用 1. 创建一个 maven 工程 2. 创建一个接口类以及实现类 // 接口 public interface HelloService { void sayHello(); } // 实现类 1 public class HelloServiceImpl1 implements HelloService { @Override public void sayHello() { System.out.println("hello impl1"); } } // 实现类 2 public class HelloServiceImpl2 implements HelloService { @Override public void sayHello() { System.out.println("hello impl2"); } } 3. 创建一个 META

基于STM32和W5500的Modbus TCP通讯

試著忘記壹切 提交于 2020-03-21 05:10:59
在最近的一个项目中需要实现Modbus TCP通讯,而选用的硬件平台则是STM32F103和W5500,软件平台则选用IAR EWAR6.4来实现。 1、移植千的准备工作 为了实现Modbus TCP通讯首先需要下载W5500的驱动源码,可以到WIZnet的官网下载: http://wizwiki.net/wiki/doku.php?id=products:w5500:driver 下载下来的压缩包,解压后如下图: 需要将ethernet文件夹拷贝到我们的项目目录中: 并在IAR的项目下添加相关的文件和路径,主要是socket.c、w5500.c、wizchip_.conf.c三个文件。这三个文件分别实现socket、硬件驱动及相关通讯配置功能,具体可以查看相应的源码级手册。 并在如下图所示的项目选项设置中添加Ethernet和Ethernet\W5500目录。 2、移植过程和代码编写 在完成以上工作后就可以开始真正地移植工作了。具体步骤如下: 硬件配置及初始化。 以太网通讯配置的初始化。 实现具体的通讯过程。 2.1、硬件的配置及初始化 由于W5500通过SPI接口与STM32通讯,所以硬件配置和初始化是非常简单的,与W5500实际上没有关系,使一些通用的操作。事实上就是STM32F103的SPI接口初始化的过程,需要实现RCC、GPIO以及SPI的初始化就可以了