前言

SPI ,全称为 Service Provider Interface,是一种服务发现机制。它通过在ClassPath路径下的 META-INF/services 文件夹查找文件,自动加载文件里所定义的类。

这一机制为很多框架的扩展提供了可能,比如在 Dubbo、JDBC、SpringBoot 中都使用到了SPI机制。虽然他们之间的实现方式不同,但原理都差不多。今天我们就来看看,SPI到底是何方神圣,在众多开源框架中又扮演了什么角色。

一、JDK中的SPI

我们先从JDK开始,通过一个很简单的例子来看下它是怎么用的。

1、小栗子

首先,我们需要定义一个接口,SpiService

public interface SpiService {void println();
}

然后,定义一个实现类,没别的意思,只做打印。

public class SpiServiceImpl implements SpiService {@Overridepublic void println() {System.out.println("------SPI DEMO-------");}
}

最后呢,要在resources路径下配置添加一个文件。文件名字是接口的全限定类名,内容是实现类的全限定类名,多个实现类用换行符分隔。
截图
文件内容就是实现类的全限定类名:

com.jcc.java.spi.SpiInterfaceImpl

2、测试

然后我们就可以通过 ServiceLoader.load 方法拿到实现类的实例,并调用它的方法。

public static void main(String[] args){ServiceLoader<SpiService> load = ServiceLoader.load(SpiService.class);Iterator<SpiService> iterator = load.iterator();while (iterator.hasNext()){SpiService service = iterator.next();service.println();}
}

3、源码分析

首先,我们先来了解下 ServiceLoader,看看它的类结构。

public final class ServiceLoader<S> implements Iterable<S>{//配置文件的路径private static final String PREFIX = "META-INF/services/";//加载的服务类或接口private final Class<S> service;//已加载的服务类集合private LinkedHashMap<String,S> providers = new LinkedHashMap<>();//类加载器private final ClassLoader loader;//内部类,真正加载服务类private LazyIterator lookupIterator;
}

当我们调用 load 方法时,并没有真正的去加载和查找服务类。而是调用了 ServiceLoader 的构造方法,在这里最重要的是实例化了内部类 LazyIterator ,它才是接下来的主角。

private ServiceLoader(Class<S> svc, ClassLoader cl) {//要加载的接口service = Objects.requireNonNull(svc, "Service interface cannot be null");//类加载器loader = (cl == null) ? ClassLoader.getSystemClassLoader() : cl;//访问控制器acc = (System.getSecurityManager() != null) ? AccessController.getContext() : null;//先清空providers.clear();//实例化内部类 LazyIterator lookupIterator = new LazyIterator(service, loader);
}

查找实现类和创建实现类的过程,都在 LazyIterator 完成。当我们调用 iterator.hasNext和iterator.next 方法的时候,实际上调用的都是 LazyIterator 的相应方法。

public Iterator<S> iterator() {return new Iterator<S>() {public boolean hasNext() {return lookupIterator.hasNext();}public S next() {return lookupIterator.next();}.......};
}

所以,我们重点关注 lookupIterator.hasNext() 方法,它最终会调用到 hasNextServicez ,在这里返回实现类名称。

private class LazyIterator implements Iterator<S>{Class<S> service;ClassLoader loader;Enumeration<URL> configs = null;Iterator<String> pending = null;String nextName = null;	private boolean hasNextService() {//第二次调用的时候,已经解析完成了,直接返回if (nextName != null) {return true;}if (configs == null) {//META-INF/services/ 加上接口的全限定类名,就是文件服务类的文件//META-INF/services/com.viewscenes.netsupervisor.spi.SPIServiceString fullName = PREFIX + service.getName();//将文件路径转成URL对象configs = loader.getResources(fullName);}while ((pending == null) || !pending.hasNext()) {//解析URL文件对象,读取内容,最后返回pending = parse(service, configs.nextElement());}//拿到第一个实现类的类名nextName = pending.next();return true;}
}

然后当我们调用 next() 方法的时候,调用到 lookupIterator.nextService 。它通过反射的方式,创建实现类的实例并返回。

private S nextService() {//全限定类名String cn = nextName;nextName = null;//创建类的Class对象Class<?> c = Class.forName(cn, false, loader);//通过newInstance实例化S p = service.cast(c.newInstance());//放入集合,返回实例providers.put(cn, p);return p; 
}

到这为止,已经获取到了类的实例。

二、JDBC中的应用

我们开头说,SPI机制为很多框架的扩展提供了可能,其实JDBC就应用到了这一机制。

在以前,需要先设置数据库驱动的连接,再通过 DriverManager.getConnection 获取一个 Connection

String url = "jdbc:mysql:///consult?serverTimezone=UTC";
String user = "root";
String password = "root";Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection(url, user, password);

而现在,设置数据库驱动连接,这一步骤就不再需要,那么它是怎么分辨是哪种数据库的呢?答案就在SPI。

1、加载

我们把目光回到 DriverManager 类,它在静态代码块里面做了一件比较重要的事。很明显,它已经通过SPI机制, 把数据库驱动连接初始化了。

public class DriverManager {static {loadInitialDrivers();println("JDBC DriverManager initialized");}
}

具体过程还得看 loadInitialDrivers ,它在里面查找的是Driver接口的服务类,所以它的文件路径就是:

META-INF/services/java.sql.Driver

private static void loadInitialDrivers() {AccessController.doPrivileged(new PrivilegedAction<Void>() {public Void run() {//很明显,它要加载Driver接口的服务类,Driver接口的包为:java.sql.Driver//所以它要找的就是META-INF/services/java.sql.Driver文件ServiceLoader<Driver> loadedDrivers = ServiceLoader.load(Driver.class);Iterator<Driver> driversIterator = loadedDrivers.iterator();try{//查到之后创建对象while(driversIterator.hasNext()) {driversIterator.next();}} catch(Throwable t) {// Do nothing}return null;}});
}

那么,这个文件哪里有呢?我们来看MySQL的jar包,就是这个文件,文件内容为: com.mysql.cj.jdbc.Driver
在这里插入图片描述

2、创建实例

上一步已经找到了MySQL中的 com.mysql.cj.jdbc.Driver 全限定类名,当调用next方法时,就会创建这个类的实例。它就完成了一件事,向 DriverManager 注册自身的实例。

public class Driver extends NonRegisteringDriver implements java.sql.Driver {static {try {//注册、调用DriverManager类的注册方法//往registeredDrivers集合中加入实例DriverManager.registerDriver(new Driver());} catch (SQLException var1) {throw new RuntimeException("Can't register driver!");}}
}

3、创建Connection

DriverManager.getConnection() 方法就是创建连接的地方,它通过循环已注册的数据库驱动程序,调用其connect方法,获取连接并返回。

private static Connection getConnection(String url, Properties info, Class<?> caller) throws SQLException {	//registeredDrivers中就包含com.mysql.cj.jdbc.Driver实例for(DriverInfo aDriver : registeredDrivers) {if(isDriverAllowed(aDriver.driver, callerCL)) {try {//调用connect方法创建连接Connection con = aDriver.driver.connect(url, info);if (con != null) {return (con);}}catch (SQLException ex) {if (reason == null) {reason = ex;}}} else {println("skipping: " + aDriver.getClass().getName());}}
}

4、扩展

既然我们知道JDBC是这样创建数据库连接的,我们能不能再扩展一下呢?如果我们自己也创建一个 java.sql.Driver 文件,自定义实现类MySQLDriver,那么,在获取连接的前后就可以动态修改一些信息。

还是先在项目resources下创建文件,文件内容为自定义驱动类 com.jcc.java.spi.domyself.MySQLDriver
在这里插入图片描述
我们的 MySQLDriver 实现类,继承自MySQL中的 NonRegisteringDriver ,还要实现 java.sql.Driver 接口。这样,在调用connect方法的时候,就会调用到此类,但实际创建的过程还靠MySQL完成。

public class MySQLDriver extends NonRegisteringDriver implements Driver{static {try {DriverManager.registerDriver(new MySQLDriver());} catch (SQLException e) {e.printStackTrace();}}public MySQLDriver() throws SQLException {}@Overridepublic Connection connect(String url, Properties info) throws SQLException {System.out.println("准备创建数据库连接.url:"+url);System.out.println("JDBC配置信息:"+info);//重置配置info.setProperty("user", "root");Connection connection =  super.connect(url, info);System.out.println("数据库连接创建完成!"+connection.toString());return connection;}
}

这样的话,当我们获取数据库连接的时候,就会调用到这里。

--------------------输出结果---------------------
准备创建数据库连接.url:jdbc:mysql:///consult?serverTimezone=UTC
JDBC配置信息:{user=root, password=root}
数据库连接创建完成!com.mysql.cj.jdbc.ConnectionImpl@7cf10a6f

三、SpringBoot中的应用

Spring Boot提供了一种快速的方式来创建可用于生产环境的基于Spring的应用程序。它基于Spring框架,更倾向于约定而不是配置,并且旨在使您尽快启动并运行。

即便没有任何配置文件,SpringBoot的Web应用都能正常运行。这种神奇的事情,SpringBoot正是依靠自动配置来完成。

说到这,我们必须关注一个东西: SpringFactoriesLoader,自动配置就是依靠它来加载的。

1、配置文件

SpringFactoriesLoader 来负责加载配置。我们打开这个类,看到它加载文件的路径是: META-INF/spring.factories
在这里插入图片描述
笔者在项目中搜索这个文件,发现有4个Jar包都包含它:

  • List itemspring-boot-2.1.9.RELEASE.jar
  • spring-beans-5.1.10.RELEASE.jar
  • spring-boot-autoconfigure-2.1.9.RELEASE.jar
  • mybatis-spring-boot-autoconfigure-2.1.0.jar

那么它们里面都是些啥内容呢?其实就是一个个接口和类的映射。在这里笔者就不贴了,有兴趣的小伙伴自己去看看。

比如在SpringBoot启动的时候,要加载所有的 ApplicationContextInitializer ,那么就可以这样做:

SpringFactoriesLoader.loadFactoryNames(ApplicationContextInitializer.class, classLoader)

2、加载文件

loadSpringFactories 就负责读取所有的 spring.factories 文件内容。

private static Map<String, List<String>> loadSpringFactories(@Nullable ClassLoader classLoader) {MultiValueMap<String, String> result = cache.get(classLoader);if (result != null) {return result;}try {//获取所有spring.factories文件的路径Enumeration<URL> urls = lassLoader.getResources("META-INF/spring.factories");result = new LinkedMultiValueMap<>();while (urls.hasMoreElements()) {URL url = urls.nextElement();//加载文件并解析文件内容UrlResource resource = new UrlResource(url);Properties properties = PropertiesLoaderUtils.loadProperties(resource);for (Map.Entry<?, ?> entry : properties.entrySet()) {String factoryClassName = ((String) entry.getKey()).trim();for (String factoryName : StringUtils.commaDelimitedListToStringArray((String) entry.getValue())) {result.add(factoryClassName, factoryName.trim());}}}cache.put(classLoader, result);return result;}catch (IOException ex) {throw new IllegalArgumentException("Unable to load factories from location [" +FACTORIES_RESOURCE_LOCATION + "]", ex);}
}

可以看到,它并没有采用JDK中的SPI机制来加载这些类,不过原理差不多。都是通过一个配置文件,加载并解析文件内容,然后通过反射创建实例。

3、参与其中

假如你希望参与到 SpringBoot 初始化的过程中,现在我们又多了一种方式。

我们也创建一个 spring.factories 文件,自定义一个初始化器。

org.springframework.context.ApplicationContextInitializer=com.youyouxunyin.config.context.MyContextInitializer
在这里插入图片描述
然后定义一个MyContextInitializer类

public class MyContextInitializer implements ApplicationContextInitializer {@Overridepublic void initialize(ConfigurableApplicationContext configurableApplicationContext) {System.out.println(configurableApplicationContext);}
}

四、Dubbo中的应用

我们熟悉的Dubbo也不例外,它也是通过 SPI 机制加载所有的组件。同样的,Dubbo 并未使用 Java 原生的 SPI 机制,而是对其进行了增强,使其能够更好的满足需求。在 Dubbo 中,SPI 是一个非常重要的模块。基于 SPI,我们可以很容易的对 Dubbo 进行拓展。

关于原理,如果有小伙伴不熟悉,可以参阅笔者文章:

Dubbo中的SPI和自适应扩展机制

它的使用方式同样是在 META-INF/services 创建文件并写入相关类名。

关于使用场景,可以参考: SpringBoot+Dubbo集成ELK实战

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 缓存中的问题

    缓存中的问题 缓存穿透 原因: 查询数据库中肯定不存在的数据,多次查询造成数据库压力过大。 一般我们一次查询的请求流程是,先去查询缓存中是否有数据,如果没有就去数据库中查,然后将查询的数据写到缓存中。 如果有人恶意查询,比如像id=-1的数据库中肯定不存在。那么在大…...

    2024/3/28 13:30:56
  2. UOS(Deepin V20)体验

    前段时间Deepin开了发布会,透露了一些v20的细节,微信公众号上也放了很多视频。概括一下就是界面大改,自研了浏览器,和中望网易讯飞等有了合作,支持了中望CAD,逆水寒,讯飞输入法等一系列软件。总之Linux的生态是越来越好了,不光腾讯跳票十年的linux qq上线了,米聊360百…...

    2024/4/6 20:33:35
  3. java中final的作用

    1.final作用于类上:表示该类不可继承某些类在设计的时候,可能出于安全的考虑,不希望被继承,例如String类。final类中的属性和方法可以是final或者非final,但是由于不能被继承,也就意味着final类中的方法都是final的,当然你也可以显式去指定。在《Effective Java》一书中…...

    2024/4/19 2:23:52
  4. CASSANDRA学习笔记 (十) 从读、写过程看运行机制

    上一篇我们有详细说MemTable,SSTable和Commitlog。其实就是数据在写入的时候,会先存在内存里(MemTable),同时会在Commit log里留一条记录,这条记录只是在系统Crash的时候才用来恢复数据的。在内存里堆积的数据足够多时,会把数据合并到磁盘文件里,生成SSTable。所以,如…...

    2024/3/29 11:42:13
  5. 使用vue-awesome-swiper制作H5动画页面

    一、引入swiper 整个H5页面是嵌套在vue项目里面,所以要引入npm install vue-awesome-swiper --save; // 下载依赖包 npm install vue-awesome-swiper --save在根组件main.js中 import Vue from vue import VueAwesomeSwiper from vue-awesome-swiper// swiper的css import swi…...

    2024/4/11 17:40:57
  6. 基于 HTML5 WebGL 构建智能数字化城市 3D 全景

    前言自 2011 年我国城镇化率首次突破 50% 以来,《新型城镇化发展规划》将智慧城市列为我国城市发展的三大目标之一,并提出到 2020 年,建成一批特色鲜明的智慧城市。截至现今,全国 95% 的副省级以上城市、76% 的地级以上城市,总计约 500 多个城市提出或在建智慧城市。基于这…...

    2024/4/4 23:31:18
  7. 日内动量交易策略

    NO:01市场参与者是非理性的,只能追求他们认为满意的目标。近几十年来,大量数据显示人的主观情绪、性格和感觉等主观心理因素或多或少会对行为人的决策构成重要的影响,即便是精确的模型也无法对个体行为的决策过程进行有效描述。金融市场并非是完全有效的市场。实证表明,现…...

    2024/3/29 11:42:10
  8. TCP/IP协议分析

    TCP/IP协议是一系列网络协议的总和,是网络通信架构的核心,它定义了电子设备如何接入因特网,以及数据如何在它们之间传输。TCP/IP 协议采用4层结构,分别是应用层、传输层、网络层和链路层,每一层都呼叫它的下一层所提供的协议来完成自己的需求。清楚TCP/IP的工作原理,通俗…...

    2024/4/5 8:40:22
  9. 漫长的RHCA历程

    之前在2012.5已经通过RHCE6的,2016.11在培训老师的大力推荐下购买了RHCE7+RHCA。于是我的名字就长期的挂在腾科RHCA学员榜了。。。。。2017.11 EX200 EX300 这RHCE我就拖了一年。。。Dear HUANG SHUMAO:The results of your EX200 Exam are reported below.Exam Domain Numbe…...

    2024/3/29 11:42:07
  10. Go 单元测试(极客时间)

    网格测试 func TestSquare (t *testing.T){input := [...]int{1,2,3}expected := [...]int{1,4,9}for i := 0;i <len(input) ;i++ {ret := square(input[i])if ret != expected[i]{t.Errorf("input is %d, the expected is %d, the actual %d",input[i],expected…...

    2024/4/11 3:22:26
  11. 一文了解Python 3.8的新功能

    Python 3.8是Python语言的最新版本,它适合用于编写脚本、自动化以及机器学习和Web开发等各种任务。现在Python 3.8已经进入官方的beta阶段,这个版本带来了许多语法改变、内存共享、更有效的序列化和反序列化、改进的字典和更多新功能。 Python 3.8还引入了许多性能改进。总的…...

    2024/3/29 11:42:05
  12. 如何在Django中开启一个定时任务

    定时任务使用的场景很多,以定时生成静态首页为例。1. 安装支持包:django-crontab 安装方式:pip install django-crontab2. 注册定时应用 在settings.INSTALLED_APPS中添加应用:INSTALLED_APPS = [ django_crontab, # 定时任务 ]3. 定时任务crontab的时间设置格式定时时间…...

    2024/3/29 11:42:04
  13. 【转载】spring-security-oauth2(十) QQ登陆上

    QQ登陆上 依据上篇的社交登陆流程我们来进行开发右半边:服务提供商相关实现(1-6步) ServiceProvider(AbstractOAuth2ServiceProvider):服务提供商抽象(如微信 qq等)OAuth2Operations(OAuth2Template):封装了1-5的步骤(标准流程)Api(AbstractOAuth2ApiBinding):对…...

    2024/3/29 11:42:03
  14. vue 版的老虎机抽奖活动效果折腾小记

    . 前沿最近公司有一个活动,让做一个老虎机抽奖活动,对于之前没有做过的我来说还是有些吃力的,于是就开始各种网上找插件,发现大部分都是jquery的,要不就是好多一部分的,一个完整的流程都走不下来,更有甚者让花钱买他的代码,我就想说大家都是分享,互相交流,你们怎么就…...

    2024/3/29 11:42:02
  15. [转载]spring-security-oauth2(三) 认证流程源码分析

    认证流程源码分析 之前的代码中,我们自定义了登陆路径,自定义成功和失败处理器以及自定义的用户登陆信息校验,下面我们通过简单的源码分析,来把这些串联起来 认证流程处理说明认证结果如何在多个请求之间共享获取认证用户信息 认证处理流程说明 spring-security过滤器链 关…...

    2024/3/29 8:09:39
  16. Apache Kafka 消息队列篇

    概述 Kafka是Apache软件基金会的开源的流处理平台,该平台提供了消息的订阅与发布,能够基于Kafka实现对网络日志流实时在线处理,在这个维度上弥补了Hadoop的离线分析系统的不足。因为基于hadoop的MapReduce系统分析离线数据延迟较高,而且不支持动态数据处理和分析。Kafka的流…...

    2024/4/17 18:12:31
  17. java数据结构

    第一章 数据结构 2.1 数据结构有什么用? 当你用着java里面的容器类很爽的时候,你有没有想过,怎么ArrayList就像一个无限扩充的数组,也好像链表之类的。好用吗?好用,这就是数据结构的用处,只不过你在不知不觉中使用了。 现实世界的存储,我们使用的工具和建模。每种数据结…...

    2024/3/29 8:09:37
  18. Dubbo 如何成为连接异构微服务体系的最佳服务开发框架

    从编程开发的角度来说,Apache Dubbo (以下简称 Dubbo)首先是一款 RPC 服务框架,它最大的优势在于提供了面向接口代理的服务编程模型,对开发者屏蔽了底层的远程通信细节。同时 Dubbo 也是一款服务治理框架,它为分布式部署的微服务提供了服务发现、流量调度等服务治理解决方…...

    2024/3/29 8:09:36
  19. 车牌识别是啥?

    随着时代的发展,汽车工业的快速发展,汽车的普及率也来越高,随之产生了大量的汽车数据,大数据是在一定时间范围内用常规软件工具进行捕捉、管理和处理的大量数据的集合,需要用新的方式才能更强的决策力、洞察发现力和流程化得海量、高增长和多样化得信息资产。 车牌识别SDK…...

    2024/4/4 20:18:53
  20. 如何读计算机论文

    论文的要求我对硕士论文的基本要求是:(1)论文的主要内容,是叙述一套方法在一个特定场合中的应用。(2)这套方法必须要有所创新或突破,并因而对学术界有所贡献。因此,它或者是解决既有问题的新方法,或者是既有方法的新应用,或者是以一个新的方法开启一整片新的应用领域…...

    2024/3/29 11:42:00

最新文章

  1. java死锁

    一、什么是死锁 锁是个非常有用的工具&#xff0c;运用场景非常多&#xff0c;因为它使用起来非常简单&#xff0c;而且易于理解。但同时它也会带来一些困扰&#xff0c;那就是可能会引起死锁&#xff0c;一旦产生死锁&#xff0c;就会造成系统功能不可用。 比如我们现在有Th…...

    2024/4/19 6:26:35
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. Mockito 学习及使用

    Mockito 学习并使用 1. Mock List Test void action001() {// org.mockito.Mockito#mock()// mock creationList mockedList mock(List.class);// using mock objectmockedList.add("one");mockedList.clear();// org.mockito.Mockito#verify()// verificationver…...

    2024/4/15 22:55:24
  4. 一场人生的风险控制,商业社会识人指南

    一、资料前言 本套社会识人资料&#xff0c;大小679.94M&#xff0c;共有37个文件。 二、资料目录 识人的终极目的&#xff1a;一整场人生的风险控制.pdf 信任的搭建&#xff1a;更多的时间与维度.pdf 没有搞不定的人&#xff01;角色人格与全面人格.pdf 政治不正确的正确…...

    2024/4/18 4:05:00
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/18 0:33:31
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/18 22:36:36
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/18 9:45:31
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/17 2:33:17
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/17 7:50:46
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/18 3:56:01
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/18 3:56:04
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/18 3:55:30
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/18 3:55:54
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/18 3:55:45
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/17 21:50:30
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/15 13:53:08
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/15 9:16:52
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/18 9:24:29
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/18 3:56:18
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/18 3:55:57
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/18 3:55:50
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/15 23:28:22
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/18 3:56:20
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/18 3:56:11
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57