Spring AOP核心源码分析之带你走进AOP的世界
文章目录
- 1、Spring AOP概述
- 2、Spring AOP术语
- 3、增强器的一种:IntroductionAdvisor
- 4、Spring AOP API
- 1、使用编程的方式基于AspectJ创建代理
- 2、顶层接口
- 3、拦截和通知接口
- 4、使用编程的方式创建代理
- 5、自动代理(auto-proxy)
- 5、Spring AOP底层原理-动态代理
- 1、JDK动态代理
- 2、Cglib动态代理
- 6、如何查看动态生成的代理类源码?
本文标题1-5会用到标题6的知识:关于如何查看动态生成的代理类的源码的相关介绍,有兴趣可以看一下短视频!
1、Spring AOP概述
AOP,面向切面编程,是一种编程思想,是抽象,而AspectJ和Spring AOP这两个框架分别实现了AOP。
Aspect是更通用的AOP框架,像其它语言也有对应的实现,如AspectC、AspectC++、Aspect.Net、AspectPHP等。
Spring AOP中引入AspectJ仅用于定义切面(基于@AspectJ的AOP支持),但运行时仍然是纯 Spring AOP,并且不依赖于 AspectJ 编织器(ajc) 。
Advice和Advisor的区别:Advice是通知(如before通知、after通知等),Advisor 是通知器(增强器),Advisor接口源码如下所示,由此可见Advisor和Advice是一对一关系。
package org.springframework.aop;
import org.aopalliance.aop.Advice;public interface Advisor {Advice EMPTY_ADVICE = new Advice() {};Advice getAdvice();boolean isPerInstance();
}
Tips:
- 切入点匹配的连接点的概念是 AOP 的关键 。
- Spring Aop仅支持方法拦截,不支持字段拦截
- Spring Aop目的不是提供最完整的 AOP 实现(尽管 Spring AOP 非常有能力),而是提供 AOP 实现和 Spring IoC 之间的紧密集成,以帮助解决企业应用程序中的常见问题
- jdk动态代理仅支持public方法,cglib虽然支持public、protected和package方法,但代理方法最好是public的
2、Spring AOP术语
切面(Aspect ):有两种定义切面的方式:基于xml和基于@AspectJ
连接点(Join point):程序执行过程中的一个点,例如方法的执行或异常的处理。在 Spring AOP中,一个连接点总是代表一个方法执行
通知(Advice):切面在特定连接点上采取的操作
PointCut(切入点):匹配连接点的谓词。Advice 与切入点表达式相关联,并在与切入点匹配的任何连接点处运行(例如,执行具有特定名称的方法)。Spring 默认使用 AspectJ 切入点表达式语言
目标对象
代理对象
编织(Weaving):可以在编译时(需要特殊的编译器,如AspectJ的ajc编译器)、类加载时(需要特殊的类加载器,如AspectJ5的加载时织入load-time weaving,LTW)和运行时完成(动态代理)
通知类型
-
before:方法执行前(不能出异常)
-
After returning :方法返回前运行(不能出异常)
-
After throwing:如果方法因抛出异常而退出,则运行
-
After(最终):方法正常运行完或抛出异常,都将运行
-
Around:这是最一般的建议,功能更强大。Spring官方建议尽量不要使用Around通知,例如将方法返回值做缓存,应优先选择After returning而不是Around
3、增强器的一种:IntroductionAdvisor
IntroductionAdvisor和PointcutAdvisor一切,都是Advisor接口的子类,都是增强器,下面通过代码看看Introduction是如何使用的。
@Component("mailBean")
public class MailBean {public void sayHello(){System.out.println("--MailBean hello--");}
}
public interface IMailService {void send();
}
public class DefaultMailServiceImpl implements IMailService {@Overridepublic void send() {System.out.println("-- MailServiceImp::send--");}
}
@Aspect
@Component
public class IntroductionAspect {// 重点在这里,这里会通过动态代理生成一个bean,该bean继承自MailBean并实现了IMailService接口,相当于给MailBean增加了一个send方法// 当执行send方法时,会被Introduction Advice拦截到,并执行DefaultMailServiceImpl的send方法@DeclareParents(value = "com.bobo.springbootdemo.introduction.MailBean", defaultImpl = DefaultMailServiceImpl.class)private IMailService iMailService;
}
@SpringBootTest
@RunWith(SpringRunner.class)
public class IntroductionTests {@Autowiredprivate ApplicationContext context;@Testpublic void test(){IMailService mailService = context.getBean("mailBean", IMailService.class);MailBean mailBean = context.getBean("mailBean", MailBean.class);mailService.send(); // 输出-- MailServiceImp::send--mailBean.sayHello();// 输出--MailBean hello--}
}
// 动态生成的代理类声明如下
public class MailBean$$EnhancerBySpringCGLIB$$73ed774c extends MailBean implements IMailService, SpringProxy, Advised, Factory
最后说一下Spring官方的介绍:introduction代表为一个类添加的新字段或方法定义,Spring AOP允许我们为任何对象introduce(引入)新的接口实现,由此一目了然。
public interface IntroductionAdvisor extends Advisor, IntroductionInfo {// 不需要MethodMatcher,也不需要PointCut,只要ClassFilter过滤出符合的类即可ClassFilter getClassFilter();void validateInterfaces() throws IllegalArgumentException;
}
如何将IntroductionAdvisor和IntroductionInterceptor关联在一起呢?这里以DefaultIntroductionAdvisor和DelegatingIntroductionInterceptor为例,以编程的方式实现DeclareParents注解同等功能。
public interface IMailService {void send();
}
public class MailBean {public void sayHello(){System.out.println("--MailBean hello--");}
}
public class IntroductionApiInterceptor extends DelegatingIntroductionInterceptor implements IMailService{@Overridepublic Object invoke(MethodInvocation mi) throws Throwable {// return mi.proceed(); // 不能这样用,因为原来的类MailBean没有send方法return super.invoke(mi); // 执行原来的类MailBean没有的send方法,这就是引入(Introduction)}@Overridepublic void send() {System.out.println("-- IntroductionApiInterceptor::send--");}
}
public class IntroductionApiAdvisor extends DefaultIntroductionAdvisor {public IntroductionApiAdvisor(){super(new IntroductionApiInterceptor(), IMailService.class);}
}
@Test
public void test(){ProxyFactory factory = new ProxyFactory(new MailBean());factory.setProxyTargetClass(true);factory.addAdvisors(new IntroductionApiAdvisor());MailBean mailBean = (MailBean)factory.getProxy();IMailService mailService = (IMailService)proxy;mailBean.sayHello(); // 输出--MailBean hello--mailService.send(); // 输出-- MailServiceImp::send--
}
// 动态生成的代理类声明如下
public class MailBean$$EnhancerBySpringCGLIB$$550bae40 extends MailBean implements IMailService, SpringProxy, Advised, Factory
4、Spring AOP API
1、使用编程的方式基于AspectJ创建代理
AspectJProxyFactory factory = new AspectJProxyFactory(targetObject);
// SecurityManager类必须打了@Aspect注解
factory.addAspect(SecurityManager.class);
// 也可以用一个实例,但是也要打了@Aspect注解
factory.addAspect(usageTracker);
// 生成代理对象
MyInterfaceType proxy = factory.getProxy();
2、顶层接口
// 增强器
public interface Advisor {Advice EMPTY_ADVICE = new Advice() {};Advice getAdvice();boolean isPerInstance();
}
// 通知
public interface Advice {
}
// 切入点增强器
public interface PointcutAdvisor extends Advisor {Pointcut getPointcut();
}
// 切入点
public interface Pointcut {// ClassFilter接口用于将切入点限制为给定的一组目标类ClassFilter getClassFilter();// 通常比ClassFilter更重要MethodMatcher getMethodMatcher();Pointcut TRUE = TruePointcut.INSTANCE;
}
public interface MethodMatcher {// 静态切入点只需要调用2参数的matches方法boolean matches(Method m, Class<?> targetClass);boolean isRuntime();// 对于动态切入点,当2参数matches方法和isRuntime都返回true时,每次执行方法都要调用一下3参数的matches方法(因为要考虑方法参数)boolean matches(Method m, Class<?> targetClass, Object... args);
}
静态切入点(只考虑类和方法):子类只需要实现StaticMethodMatcherPointcut 即可,如正则表达式切入点:JdkRegexpMethodPointcut。
动态切入点(还要考虑方法参数):子类要实现DynamicMethodMatcherPointcut
3、拦截和通知接口
public interface Interceptor extends Advice {
}
// Around通知
public interface MethodInterceptor extends Interceptor {Object invoke(MethodInvocation invocation) throws Throwable;
}
public interface BeforeAdvice extends Advice {
}
// Before通知
public interface MethodBeforeAdvice extends BeforeAdvice {void before(Method m, Object[] args, Object target) throws Throwable;
}
public interface AfterAdvice extends Advice {
}
// throw通知,throw通知不需要实现任何方法,因此需要自己添加方法:void afterThrowing(Method m, Object[] args, Object target, ServletException ex)
public interface ThrowsAdvice extends AfterAdvice {
}
// After Return通知
public interface AfterReturningAdvice extends AfterAdvice {void afterReturning(@Nullable Object returnValue, Method method, Object[] args, @Nullable Object target) throws Throwable;
}
// Introduction Advice,这是一种特殊的通知。IntroductionInterceptor的用法见2.3节
public interface IntroductionInterceptor extends MethodInterceptor, DynamicIntroductionAdvice {
}
4、使用编程的方式创建代理
ProxyFactory factory = new ProxyFactory(new MailBean());
factory.setProxyTargetClass(true);
factory.addAdvisors(new IntroductionApiAdvisor());
MailBean mailBean = (MailBean)factory.getProxy();
// 创建完代理后,仍然可以增删增强器和通知
Advised advised = (Advised) mailBean;
Advisor[] advisors = advised.getAdvisors();
advised.addAdvice(new DebugInterceptor());
advised.addAdvisor(new DefaultPointcutAdvisor(mySpecialPointcut, myAdvice));
ProxyConfig提供的属性:
-
proxyTargetClass:是否代理目标类
-
optimize:是否优化,如果不了解优化原理则不要轻易使用
-
frozen:如果为true则不允许更改配置。如果不希望调用者能够操纵代理(通过Advised 接口)则设为true,默认是false
-
exposeProxy:确定当前代理是否应该在ThreadLocal公开以便目标可以访问它(通过AopContext.currentProxy())
ProxyFactoryBean提供的属性:
- proxyInterfaces:String接口名称数组。如果未提供,则使用目标类的CGLIB 代理
- interceptorNames:Advisor、interceptor或其它Advice的String数组,这些名称是当前工厂中的 bean 名称,可使用*号
- singleton :是否是单例,默认值为true
ProxyFactoryBean的例子:
// 定义目标类
@Component
public class MessageBean {public void sendMsg(){System.out.println("-- MessageBean sendMsg --");}
}
// 定义前置通知
@Component
public class MessageBeforeAdvice implements MethodBeforeAdvice {@Overridepublic void before(Method method, Object[] args, Object target) throws Throwable {System.out.println("-- MessageBeforeAdvice before --");}
}
// 定义增强器,注入前置通知
@Component("messageAdvisor")
public class MessageAdvisor extends StaticMethodMatcherPointcutAdvisor {@Autowiredprivate MessageBeforeAdvice messageBeforeAdvice;@PostConstructpublic void init(){super.setAdvice(messageBeforeAdvice);}@Overridepublic boolean matches(Method method, Class<?> targetClass) {if(targetClass.getName().contains("MessageBean") && method.getName().contains("send")){return true;}return false;}
}
// 定义后置通知
@Component("messageAfterAdvice")
public class MessageAfterAdvice implements AfterReturningAdvice {@Overridepublic void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {System.out.println("-- MessageAfterAdvice afterReturning --");}
}
// 配置ProxyFactoryBean
@Configuration
public class ProxyFactoryBeanConfig {@Autowiredprivate MessageBean messageBean;@Beanpublic ProxyFactoryBean proxyFactoryBean(){ProxyFactoryBean bean = new ProxyFactoryBean();bean.setTarget(messageBean);bean.setProxyTargetClass(true);bean.setInterceptorNames("messageAdvisor","messageAfterAdvice");bean.setSingleton(true);return bean;}
}
// 单元测试
@Test
public void test3(){ProxyFactoryBean proxyFactoryBean = context.getBean(ProxyFactoryBean.class);MessageBean proxy = (MessageBean)proxyFactoryBean.getObject();proxy.sendMsg();
}
最后输出
// -- MessageBeforeAdvice before --
// -- MessageBeforeAdvice before --
// -- MessageBean sendMsg --
// -- MessageAfterAdvice afterReturning --
5、自动代理(auto-proxy)
前面都是通过ProxyFactory或ProxyFactoryBean来为目标类创建代理,但这种方式虽然灵活,但不利于管理,下面考虑使用自动代理功能。
自动代理建立在BeanPostProcessor的基础上,org.springframework.aop.framework.autoproxy包提供了一些现成的自动代理类
- BeanNameAutoProxyCreator:通过beanName通配符匹配,如果匹配成功则创建代理
- DefaultAdvisorAutoProxyCreator:更加通用和强大
5、Spring AOP底层原理-动态代理
1、JDK动态代理
public interface IProductService {void update();
}
public class ProductServiceImpl implements IProductService {@Overridepublic void update() {System.out.println("-- ProductServiceImpl update --");}
}
public class ProductHandler implements InvocationHandler {private Object target;public ProductHandler(Object target){this.target = target;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("before advice");// 这里必须要传入目标对象Object res = method.invoke(target,args);System.out.println("after advice");return res;}
}
public class JdkDynamicProxyTests {public static void main(String[] args) {Object obj = Proxy.newProxyInstance(JdkDynamicProxyTests.class.getClassLoader(),new Class[]{IProductService.class},new ProductHandler(new ProductServiceImpl()));IProductService productService = (IProductService)obj;productService.update();}
}
// 最后生成的代理类签名如下
// public final class $Proxy0 extends Proxy implements IProductService
2、Cglib动态代理
public class ProductServiceImpl implements IProductService {@Overridepublic void update() {System.out.println("-- ProductServiceImpl update --");}
}
public class ProductCallback implements MethodInterceptor {// obj:生成的代理对象;method:目标方法;methodProxy:目标方法+代理方法@Overridepublic Object intercept(Object obj, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {System.out.println("before advice");Object res = methodProxy.invokeSuper(obj,args);System.out.println("after advice");return res;}
}
public class CglibDynamicProxyTests {public static void main(String[] args) {Enhancer enhancer = new Enhancer();enhancer.setSuperclass(ProductServiceImpl.class);enhancer.setCallback(new ProductCallback());ProductServiceImpl service = (ProductServiceImpl)enhancer.create();service.update();}
}
注意:要区分org.aopalliance.intercept.MethodInterceptor和org.springframework.cglib.proxy.MethodInterceptor,前者是Advice的子类,是通知,而后者是Callback的子类,用于Cglib生成代理类时被动态织入代理类中。
6、如何查看动态生成的代理类源码?
如何查看动态代理类的源码
视频链接:https://www.bilibili.com/video/BV1fb4y1j7LP/
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 微服务实战:基于Spring Cloud Gateway + AWS Cognito 的BFF案例
背景 微服务架构的分布式特性可以带来很多好处,但是单个微服务并不能独立对外提供服务,一个微服务群组需要作为一个整体对外提供完整的服务体验,而如何实现支撑整体的通用功能就需要好好考虑一番了。 就我司的需求来说,我们需要…...
2024/5/8 12:05:50 - DockerKubernetes ❀ Docker镜像与容器相关操作基础命令详解
文章目录1、Docker信息查询1.1 版本信息1.2 详细信息1.3 帮助命令2、镜像命令2.1 本地镜像查看2.2 镜像搜索2.3 镜像拉取2.4 镜像删除3、容器命令3.1 新建并启动容器3.2 列出所有运行的容器3.3 退出容器3.4 启动/重启/停止/杀死/删除/重新登录 容器1、Docker信息查询 1.1 版本信…...
2024/4/5 3:03:58 - 基于晏殊几何学涡旋激波模型仿真的光效和模型解析原理一
...
2024/4/13 16:38:27 - LeetCode - Easy - 28 - 实现strStr()
原题链接 : 实现strStr() 哎呀这题呀… 给我看到怀疑人生… 开门见山哈, 这题有三种解法, 如果作为简单题来看, 这题的思路就比较简单粗暴 简单题的思路 : 题目的意思是要在原串里找到目标串,并返回原串的首下标, 最简单的思路就是将原串长度为目标串的子串都依次和目标串比较…...
2024/4/13 16:38:37 - Pytorch预测
本次测试输入 dog.png # Coding by ajupyter from PIL import Image from torch import nn import torch import torchvisionclass Model(nn.Module):def __init__(self):super(Model, self).__init__()self.model nn.Sequential(nn.Conv2d(in_channels3, out_channels32, k…...
2024/4/13 16:38:22 - MXY---数据库
数据库 数据库:数据库就是管理数据的仓库 数据库分类: 1)关系型数据库:Orcale、MYSQL 2)非关系型数据库:Redis 关系、非关系型数据库: 1)关系型数据库,建立在紧密关系基…...
2024/4/5 3:03:53 - JVM GC
文章目录如何判断对象可以被回收?1.引用计数2. 可达性分析(Reachability Analysis)GC算法和GC收集器Serial(串行)收集器ParNew(Parallel New Generation)收集器Parallel Scavenge收集器Serial O…...
2024/4/17 23:20:46 - 动态规划简单 NC245 杨辉三角(一)
NC245 杨辉三角(一) 描述 给定一个非负整数 num ,生成杨辉三角的前 num 行。 杨辉三角中,每个数是左上方和右上方的数之和。 数据范围: 1 \le num \le 30 \1≤num≤30 例如当输入为4时,对应的返回值为[[1],[1,1],[1,2,1],[1,3,3…...
2024/4/15 3:12:09 - 计算机科学类专升本复习之“C语言指针变量的定义和使用”详解(初稿)
C语言指针变量的定义和使用(精华) "数据"在内存中的"地址"也成为"指针",如果一个变量存储了一份数据的"指针",我们就称它为"指针变量"。 在C语言中,允许用一个 变…...
2024/4/14 4:55:59 - 你发年终奖了吗?
年终奖是很多人的快乐,也是很多人的痛。 当然快乐与你有没有缘,就要看快乐与你有没有缘了,这是个玄学。 在一些公司是如果一个人有年终奖其他人就会都有,在一些公司是根据你整年的表现来的。 比如有这么一家公司: …...
2024/4/7 20:39:06 - 计算机网络:王道考研
前言 计算机考研课程408包括计组、计网、操作系统、数据结构与算法,计组在21年就补完了——计算机组成原理:最详细笔记!,数据结构与算法、操作系统都看了,就差计网这个八股文,系统的听了一遍考研课程《王道-计算机网络…...
2024/4/13 16:39:13 - 计算机网络面试题总结
计算机网络面试题总结网络分层结构TCP/IP五层模型三次握手两次握手可以吗?四次挥手第四次挥手为什么要等待2MSL?为什么是四次挥手?TCP有哪些特点?TCP和UDP的区别?HTTP协议的特点?HTTP报文格式HTTP状态码有哪…...
2024/4/16 21:41:34 - 【LeetCode-SQL每日一练】—— 595. 大的国家
🎈写在前面 🙋♂️大家好呀,我是超梦。大家可以叫我小梦~ 小伙伴们都知道,不管是在学习中还是日常工作中,几乎天天是要跟数据库打交道的,为了更好的操作数据库,我们的SQL知识储备是必不可少的…...
2024/4/13 16:39:33 - 9,重载,继承抽象类的喂猫狗的案例
1 public static void main(String[] args) {Dog dog new Dog();Cat cat new Cat();Person person1 new Person();Person person2 new Person();Scanner sc new Scanner(System.in);OUT:while (true) {System.out.println("请作出选择:1,照顾猫…...
2024/4/13 16:39:38 - 专转本-大数据主要应用领域-笔记
大数据在农业领域的典型应用 大数据理论和技术在农业上的应用和实践,是指运用大数据理念、技术和方法,解决农业或涉农领域数据的采集、存储、分析与应用等一系列问题,然后以此来指导农业生产经营。这里所讲的农业大数据就是指以大数据分析为基础去解决一系列问题。典型的一些…...
2024/4/18 1:51:07 - 推力圆锥滚子轴承的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
本文研究全球与中国市场推力圆锥滚子轴承的发展现状及未来发展趋势,分别从生产和消费的角度分析推力圆锥滚子轴承的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、产值及全球和中国…...
2024/4/13 16:41:10 - 在线SVG在线编辑器
在线SVG在线编辑器 在线SVG在线编辑器 SVG在线编辑器,在线编辑SVG,SV辑器,在线编辑SVG,SVG在线编辑器,在线编辑SVG https://tooltt.com/svg/...
2024/4/19 14:31:34 - 1017 Queueing at Bank (25 分) (模拟 23/25
添加链接描述 /* 每个客户最多被服务1小时 给的小时 分钟 秒 超过17.00.01不被服务 提前来要等待 保留一位小数 */ #include<bits/stdc.h> using namespace std; const int N1e49; struct node {int st,nex; }t[N]; bool cmp(node a,node b){return a.st<b.st; } pr…...
2024/4/13 16:39:23 - 人脸识别外部接口调用
本文代码及数据集来自《Python大数据分析与机器学习商业案例实战》 要在Python中调用百度人脸识别接口,得先安装baidu-aip库。可以在Windows命令行窗口中输入并执行“pip install baidu-aip”命令,或者在JupyterNotebook中输入并运行“!pip install baid…...
2024/4/18 14:09:33 - redis夺命连环问6--主库故障了从库该怎么办,数据还能保持一致吗,Redis 还能正常提供服务吗?
目录主库故障了从库该怎么办,数据还能保持一致吗,Redis 还能正常提供服务吗?先谈哨兵机制哨兵咋监控的呢?如何选定新主库呢?哨兵集群是怎么建立的?哨兵集群由哪个实例来执行主从切换呢?主库故障…...
2024/4/13 16:39:03
最新文章
- PMP考试未通过该怎么办?如何补考?
2024年3月10日PMP考试成绩正在陆续分批次发布。没有考试通过的同学就会疑问,考试没考过怎么办?可不可以补考?面对PMP考试没通过的情况,我们应该如何应对呢? PMP考试没合格可以补考,而且一年内有两次补考机…...
2024/5/9 1:43:59 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/5/7 10:36:02 - 利用Sentinel解决雪崩问题(一)
1、解决雪崩问题的常见方式有四种: 超时处理:设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待;舱壁模式:限定每个业务能使用的线程数,避免耗尽整个tomcat的资源,因此也叫线程隔离;熔断降级:由断路器统计业务…...
2024/5/4 23:53:05 - Vue3学习笔记+报错记录
文章目录 1.创建Vue3.0工程1.1使用vue-cli创建1.2 使用vite创建工程1.3.分析Vue3工程结构 2.常用Composition2.1 拉开序幕的setup2.2 ref函数_处理基本类型2.3 ref函数_处理对象类型2.4 ref函数使用总结 1.创建Vue3.0工程 1.1使用vue-cli创建 查看vue/cli版本,确保…...
2024/5/8 9:55:54 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/8 6:01:22 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/7 9:45:25 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/5/4 23:54:56 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/7 14:25:14 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/5/4 23:54:56 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/5/4 23:55:05 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/5/4 23:54:56 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/5/7 11:36:39 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/5/4 23:54:56 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/6 1:40:42 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/5/4 23:54:56 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/5/8 20:48:49 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/5/7 9:26:26 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/5/4 23:54:56 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/8 19:33:07 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/5 8:13:33 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/5/8 20:38:49 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/5/4 23:54:58 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/6 21:42:42 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/5/4 23:54:56 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) 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 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在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