SpringBoot的自动装配原理——其实真得就是你想的那么简单~
📑本篇内容:SpringBoot二刷自动装配原理——其实真得就是你想的那么简单~
📘 文章专栏:SpringBoot微服务 其原理与项目开发
🎬最近更新:2022年1月22日 SpringBoot二刷自动装配原理——其实真得就是你想的那么简单~
🙊个人简介:一只二本院校在读的大三程序猿,本着注重基础,打卡算法,分享技术作为个人的经验总结性的博文博主,虽然可能有时会犯懒,但是还是会坚持下去的,如果你很喜欢博文的话,建议看下面一行~(疯狂暗示QwQ)
🌇点赞 👍 收藏 ⭐留言 📝 一键三连 关爱程序猿,从你我做起
📘本文目录
- 🚀SpringBoot自动装配原理理解以及深入了解🚀
- 💖写在前面💖
- 🎁1、SpringBoot自动装配带来的便利
- 🎠2、SpringBoot的自动装配原理
- 🍨1、SpringBoot程序中的pom.xml文件的解读
- 🍨2、@SpringBootApplication理解自动装配原理
- 🥚1、@SpringBootApplication
- 🥚2、@SpringBootConfiguration
- 🥚3、@ComponentScan
- ✨4、@EnableAutoConfiguration(重点!!!)✨
- 🎗1、@AutoConfigurationPackage
- 🎗2、AutoConfigurationImportSelector.class
- 🎉3、/META-INF/spring.factories🎉
- ✨5、xxxxxAutoConfiguration✨
- 🧨3、总结SpringBoot自动装配原理🧨
- 💖写在后面💖
🚀SpringBoot自动装配原理理解以及深入了解🚀
💖写在前面💖
二刷SpringBoot的第一天,还是老样子,把当初一开始恶心了我一天
的自动装配原理
吃的死死的,哼,一日不见,如隔三秋,自动装配原理小儿~纳命来
!!!小付今天给大家整理的是关于SpringBoot自动装配原理的相对应的知识理解
,以及深入
,如何快速理解
应对这个面试的始祖题
,这一篇绝对够了哦!相信你自己,这一文绝对通俗易懂,等你再遇时,一定信手拈来,妙笔生花
。
🎁1、SpringBoot自动装配带来的便利
大家都学过SSM框架,给我们的
最直观感受
就是配置文件太过于繁琐
和复杂
,如果稍有不慎配置出错
,你的项目就无法跑起来
了,这明显是个很头痛的问题,但是学过了SpringBoot之后
,你就会明白一个道理,约定大于配置
,只需要对SpringBoot进行简单的配置
你的项目就会像SSM框架整合出来的项目一样,随心所欲的跑起来
了,并且还能在此基础上配置更多
的你想配置的依赖
功能,那SpringBoot是如何做到只需简单几步就可以构建
出以前那样庞大且配置复杂的项目呢?这就不得不提到自动装配原理
了,这就是他带来的好处以及便利~
注意事项
:
- 本文对SpringBoot自动装配原理的理解是基于SpringBoot-2.6.3最新版本的理解,可能部分源码与某些兄弟姐妹们不太一样,所以如有不大对的地方,希望您能给我做出指出我会积极改正的!感谢阅读哦~
🎠2、SpringBoot的自动装配原理
当你学了如何利用SpringBoot快速搭建一个小的项目并将其作为项目经历写在简历上时
(后续博主会快速搭建一个给大家上手的~),面试的HR大大有可能会对你问一些简单的有关于SpringBoot的相关面试题,那么SpringBoot自动装配原理那就可谓是SpringBoot面试题中的始祖
了,那我们现在就来看看如何掌握这个让人头痛不已的自动装配原理
吧!
本文会从以下两个大方面
分析SpringBoot的自动装配原理
:
- 第一部分解读pom.xml文件SpringBoot可能会将那些依赖自动装配到IOC容器当中
- 第二部分就是在SpringBoot程序的主启动类上的注解进行剖析,去了解SpringBoot是如何将写好的配置文件进行自动装配的。
🍨1、SpringBoot程序中的pom.xml文件的解读
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.3</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.alascanfu</groupId><artifactId>hello-springboot</artifactId><version>0.0.1-SNAPSHOT</version><name>hello-springboot</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
步骤1:拿到源码之后
我们可以先看看源码的组成
,并且分析源码与在Spring的Maven项目中的pom.xml有什么异同
?
注意:在IDEA中我们可以通过Ctrl+鼠标左键,点击对应的类,可进入其源码进行解读。
我们现在来截断分析
:
build标签
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
这个和我们之前在Spring中配置的build完全不一样
(之前我们是在build中配置Maven打包资源的拦截,那些需要打包,那些不打包),且这个的标签为这明显是个插件
,见名知意就知道这是Maven项目负责打包SpringBoot程序的一个小插件,走走走,看下一段~
parent标签
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.3</version><relativePath/> <!-- lookup parent from repository --></parent>
这是一个引入父Maven工程的仓库地址,我们Ctrl+左键点击 spring-boot-starter-parent
看看这个仓库配置文件帮我们配置了些啥?
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.6.3</version></parent>
映入眼帘的还是一个父工程依赖
,接着进去瞅瞅
!
<properties><activemq.version>5.16.3</activemq.version><antlr2.version>2.7.7</antlr2.version><appengine-sdk.version>1.9.93</appengine-sdk.version><artemis.version>2.19.0</artemis.version><aspectj.version>1.9.7</aspectj.version>...
</properties>
你会神奇的发现,这里通过properties配置了很多依赖的版本号,就比如这里的 activemq 消息队列
aspecj
AOP相关的,等等都在这里…那差不多你就明白了在 spring-boot-dependencies
中配置了很多很多 的依赖,并且已经将其依赖版本
配置好了,如果我们需要导入较低或者较高版本的依赖只需要根据在这里的版本修改版本号
就好了~
既然知道这里面的相关配置,那我们接着退回去看看,上一个 spring-boot-starter-parent
帮我们配置了其他的什么东西没?
<build><resources><resource><directory>${basedir}/src/main/resources</directory><filtering>true</filtering><includes><include>**/application*.yml</include><include>**/application*.yaml</include><include>**/application*.properties</include></includes></resource><resource><directory>${basedir}/src/main/resources</directory><excludes><exclude>**/application*.yml</exclude><exclude>**/application*.yaml</exclude><exclude>**/application*.properties</exclude></excludes></resource></resources>
眼不眼熟???这就是和Spring 的Maven工程中里pom.xml文件配置的几乎一毛一样
,配置打包输出的资源,对yml,yaml,properties
等文件都不进行拦截
。
那这里就差不多了,但是细心的小伙伴们又会发现在 spring-boot-dependencies
中有很多配置文件会爆红,那接下来咱们就在退回到我们SpringBoot程序中的pom.xml
文件
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
我们配置了的这个,那么你心中答案就有了,跑到spring-boot-dependencies
中看看对应的依赖是否爆红?如果没有爆红就能应征你内心的想法了。答案是肯定的!你看如图所示:
人家都爆红了就他一个没爆红
,这说明什么? 说明他已经被自动装配到咱们的IOC容器当中,能被正常启动使用了。这就是对SpringBoot程序中pom.xml文件的理解与掌握,快速知其原因,知其理,第一部分就差不多是这个样子了,当然我们还要知道为啥导入这个就会被自动装配到简单运行呢?光导入依赖可不能让SpringBoot认认真真跑起来呢
,这只是先理解自动装配这个概念
。
🍨2、@SpringBootApplication理解自动装配原理
打开我们SpringBoot项目的主启动类
:你会发现这个主启动类代码不过三行
:
@SpringBootApplication
public class HelloSpringbootApplication {public static void main(String[] args) {SpringApplication.run(HelloSpringbootApplication.class, args);}
}
如果把@SpringBootApplication这行删除了就无法正常启动了,那咱们就来了解一下@SpringBootApplication
这个注解具体的功能是干啥的吧~
@SpringBootApplication注解分析大概从上述Xmind图来进行分析,因为小付的Xmind暂未破解所以有水印稍微担待一点~
🥚1、@SpringBootApplication
开始对@SpringBootApplication进行剖析
Ctrl+左键点击@SpringBootApplication咱们进去看看这玩意写了些啥~
映入眼帘的除了四个原生注解之外,就是这四个注解了。
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {@Filter(type = FilterType.CUSTOM,classes = {TypeExcludeFilter.class}
), @Filter(type = FilterType.CUSTOM,classes = {AutoConfigurationExcludeFilter.class}
)}
)
@SpringBootApplication概述
- 这是一个组合注解 分别由
@SpringBootConfiguration
、@EnableAutoConfiguration
、@ComponentScan
三个重要注解
所组成。 - 目前来说咱还不知道他能干嘛,不过
可以肯定的是它是SpringBoot程序的主程序启动注解
。
接下来接着看来总结这个@SpringBootApplication
注解有啥用喽~
🥚2、@SpringBootConfiguration
@Configuration
@Indexed
public @interface SpringBootConfiguration {@AliasFor(annotation = Configuration.class)boolean proxyBeanMethods() default true;
}
映入眼帘除却四个原生注解就是这俩孩子了!
**第一个注解,眼熟么?眼熟么?**这不就是纯纯的Spring注解一个作为配置组件注入到IOC容器的注解
么。
@Configuration
进去就是一个@Component组件
。所以就不再细讲了。
第二个注解@Indexed,应该很多人不认识,毕竟这是Spring5的新产物,其实小付对它也不是很了解,但是经过查阅,得知:它是一个用于给模式注解添加索引,来以此提升启动性能的组件。
那么到此为止@SpringBootConfiguration
就了解了塞就是使得@SpringBootApplication 作为一个Spring的配置自动注入到IOC容器当中喽。
🥚3、@ComponentScan
先分析这个简单一点的注解:你只需要这个注解是用于扫描当前SpringBoot程序启动类同级所处的包下所有的注解程序
。至于为什么是同级目录所处的包下
,这也在源码中有所体现,这里就不带大家看了。
✨4、@EnableAutoConfiguration(重点!!!)✨
既然都知道上述两个注解并没实际将具体的依赖注入启动,那肯定使得SpringBoot实现自动装配最主要的东西肯定非他莫属了呀~
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";Class<?>[] exclude() default {};String[] excludeName() default {};
}
@EnableAutoConfiguration
:
- 毫无疑问这也是一个组合注解:它是由@AutoConfigurationPackage和@Import({AutoConfigurationImportSelector.class})所组成。
- 它有什么用呢?目前为止我们通过这段源码只能看得出这个注解将
AutoConfigurationImportSelector.class
叫做自动装配导入选择器
的类注入到IOC容器了,这个类有啥用?咱们等会儿讲。 - 那么
@AutoConfigurationPackage
又是干嘛的呢?不知道往里进就是了
。
🎗1、@AutoConfigurationPackage
@Import({Registrar.class})
public @interface AutoConfigurationPackage {String[] basePackages() default {};Class<?>[] basePackageClasses() default {};
}
- 由源码咱们得知:该注解就干了一件事情,就是将
Registrar.class
这个类注入到IOC容器当中了,那么我们必须要明白这个 叫做注册的类干了些啥!!! - 神奇的是你点击进去之后,这个
注册类Registrar.class
实际是AutoConfigurationPackages.java
的静态内部类。
static class Registrar implements ImportBeanDefinitionRegistrar, DeterminableImports {Registrar() {}//导入@ComponentScan的包中数据进行自动注册public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {AutoConfigurationPackages.register(registry, (String[])(new AutoConfigurationPackages.PackageImports(metadata)).getPackageNames().toArray(new String[0]));}//确定数据导入正确性public Set<Object> determineImports(AnnotationMetadata metadata) {return Collections.singleton(new AutoConfigurationPackages.PackageImports(metadata));}}
- 这个注册类用于读取从
@ComponentScan
读取的包中元数据AnnotationMetadata metadata
进行自动注册。
总结就是@AutoConfigurationPackage这个注解是用于读取@ComponentScan中通过注解注册的Java程序的元数据用来进行自动注册的
🎗2、AutoConfigurationImportSelector.class
public String[] selectImports(AnnotationMetadata annotationMetadata) {if (!this.isEnabled(annotationMetadata)) {return NO_IMPORTS;} else {AutoConfigurationImportSelector.AutoConfigurationEntry autoConfigurationEntry = this.getAutoConfigurationEntry(annotationMetadata);return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations());}}
这是这个类中的第一个方法,用于选择导入的数据,根据元数据annotationMetadata进行导入~
- 如果不支持元数据导入,就直接返回空的导入。
- 反之调用类中的
getAutoConfigurationEntry
获取自动装配实体
的这个方法
这个方法中有这么一个又调用了List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes)
方法
上述调用List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);
方法主要目的是为了获取所有候选配置
。
getCandidateConfigurations(annotationMetadata, attributes)
进入源码看其到底干了个啥?
protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.");return configurations;}
- 这个获取候选配置的方法通过
SpringFactoriesLoader这个类的静态方法loadFactoryNames
用于加载所有需要的配置,那这些配置哪里来呢? - 看其参数之一getSpringFactoriesLoaderFactoryClass(),返回了一个
支持自动装配的类
!!!
protected Class<?> getSpringFactoriesLoaderFactoryClass() {return EnableAutoConfiguration.class;}
而loadFactoryNames
这个方法返回的是一个Map<String, List<String>> loadSpringFactories(ClassLoader classLoader)
可以看到这里有一个枚举类进行读取/META-INF/spring.factories的资源路径,那到底这个路径存了些啥东西呢?
🎉3、/META-INF/spring.factories🎉
1、这个就是SpringBoot帮我们自动配置的文件
,其目录位置在spring-boot-autoconfigure-2.6.3.jar
下的META-INF中的spring.factories
。
2、你可以在其中找到所有SpringBoot自动帮我们配置好的文件自动配置类
。
✨5、xxxxxAutoConfiguration✨
重点:至于每个自动装配类是否全都被自动配置进行装配到IOC容器呢?怎么可能嘛,这里又和上面的pom.xml文件进行了联系,你这下肯定就懂了塞~,那SpringBoot又是如何区分哪些装配了,哪些没有装配呢?
这就又要来看这些自动装配类是如何进行书写的啦~
这里咱们用咱们最常用的DataSourceAutoConfiguration来举例子
@Configuration(proxyBeanMethods = false
)
@ConditionalOnClass({DataSource.class, EmbeddedDatabaseType.class})
@ConditionalOnMissingBean(type = {"io.r2dbc.spi.ConnectionFactory"}
)
@AutoConfigureBefore({SqlInitializationAutoConfiguration.class})
@EnableConfigurationProperties({DataSourceProperties.class})
@Import({DataSourcePoolMetadataProvidersConfiguration.class, InitializationSpecificCredentialsDataSourceInitializationConfiguration.class, SharedCredentialsDataSourceInitializationConfiguration.class})
public class DataSourceAutoConfiguration {
}
你可以看到咱们很多不认识的注解,但都基本上可以见名知意
:
比如:
ConditionalOnClass
:这代表的就是在IOC容器中必须要存在这两个class才能被自动装配
ConditionalOnMissingBean
:代表的就是必须在IOC中没有这样的组件类型
才可以装配AutoConfigureBefore
:代表的是必须在SqlInitializationAutoConfiguration
自动装配之前完成装配EnableConfigurationProperties
:支持配置的Properties配置文件的Java类型文件,在yaml中或者properties进行配置的属性。
这里不理解你就可以进DataSourceProperties.class去看看你就知道这玩意是干啥的了
这样整个SpringBoot的自动装配原理就彻底了解了,但是实际启动的run方法,如何启动,就要另说了哦~
🧨3、总结SpringBoot自动装配原理🧨
SpringBoot程序在启动的时候会通过@EnableAutoConfiguration注解
找到 spring-boot-autoconfigure.jar
下的META-INF/spring.factories
文件中的所有自动配置类
,并将其加载
,这些被找到的自动配置类
都是以xxxAutoConfiguration
形式来命名的。简单理解这个就是JavaConfig自动配置的文件,通过以Properties结尾命名的类中取得在全局配置文件中
配置的属性
,如spring.datasource.url=xxxxxxx
这种就是对自动装配原理的最好体现。
💖写在后面💖
每天一点小知识,每天一道小算法
日积月累,无怨无悔
前途之路,定是光明璀璨!
加油! 致敬前进道路上的每位程序猿~
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- ElasticSearch
ElasticSearch 1. ElasticSerch简介: 全文搜索属于最常见的需求,开源的 Elasticsearch 是目前全文搜索引擎的首选。 它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它 Elastic 的底层是开源库 Lucene。但是,你没法直…...
2024/4/14 14:56:00 - 寒假第二周的周记
寒假已经在家两个星期了,这个星期相比上个星期出门少了,一个原因是这个星期几乎每天都在下雪,还有是疫情原因很多娱乐场所都关闭了。这个星期的学习状态相比于上个星期还是有所改进的,不过还是有些问题,比如学习效率不…...
2024/4/14 8:16:45 - 2020最新Android大厂面试真题大全(附答案解析),音视频学习指南来咯
二、网络和安全机制 1.网络框架对比和源码分析 2.自己去设计网络请求框架,怎么做? 3.网络请求缓存处理,okhttp如何处理网络缓存的 4.从网络加载一个10M的图片,说下注意事项 5.TCP的3次握手和四次挥手 6.TCP与UDP的区别 7.TCP与UD…...
2024/4/14 8:17:00 - 【LeetCode】744. 寻找比目标字母大的最小字母
前言 寻找比目标字母大的最小字母 给你一个排序后的字符列表 letters ,列表中只包含小写英文字母。另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母。 在比较时,字母是依序循环出现的。举个例子: 如…...
2024/4/25 16:06:31 - 3. 配置 NTP
3. 配置 NTP 手动 #apt -y install ntp #vi /etc/ntp.conf... pool ntp7.aliyun.com iburst //阿里云 pool cn.ntp.org.cn iburst //中国 pool edu.ntp.org.cn iburst //中国教育网 pool hk.ntp.org.cn iburst //中国香港 pool jp.ntp.org.cn iburst //日本 ...systemctl re…...
2024/4/19 23:48:40 - 计算机系统基础:时序逻辑电路实验
一、实验目的 1.掌握集成触发器的逻辑功能及其应用 2.了解移位控制的功能及其工作原理 二、实验设备与器材 1.5V直流电源 2.连续脉冲源 3.单次脉冲源 4.逻辑电平开关 5.逻辑电平显示器 6&#x…...
2024/4/14 8:16:50 - C++——多态
先看一个简单的派生类 #include <iostream> using namespace std; class A { public:void func(){cout << "这是基类的func函数" << endl;} };class B : public A { public:void func(){cout << "这是派生类里的func函数" <&l…...
2024/4/20 2:12:14 - float 和 double
float 类型得变量 占4字节内存 double 类型的变量 占8字节的内存 浮点数使用格式符”%f”控制,默认保留小数点后6 位数字。 所以当判断浮点数是否为0的时候,要与-0.000001 和0.000001比较。 if (abs(x) <0.000001) %f 和 %lf 默认保留六位小数&am…...
2024/4/19 15:29:38 - linux内核的配置机制及其编译过程
配置系统的基本结构 Linux内核的配置系统由三个部分组成,分别是: 1、Makefile:分布在 Linux 内核源代码根目录及各层目录中,定义 Linux 内核的编译规则; 2、配置文件(config.in(2.4内核,2.6内核)):给用户提供配置选择的功能; 3、配置工具:包括配置命令解释器(对…...
2024/4/14 8:17:00 - 数据结构:二叉树的先序遍历、中序遍历和后续遍历原理和实现
先序遍历 中序遍历 后续遍历 /** 程序名:btree2.c,此程序演示二叉树的前序遍历、中序遍历和后序遍历,包括递归和非递归两种方法。* */ #include <stdio.h> #include <string.h> #include <stdlib.h>/// // 二叉树的数据…...
2024/4/14 8:17:31 - Codeforces周赛 Round #767 (Div. 2) :C. Meximum Array
C. Meximum Array 题意: 给定一个 a 序列,当 a 非空时可以选择从 a 中切出前 k 个数字(有才行),这 k 个数字取一个 MEX,得出来的结果加给 b 序列,要求构造出的 b 序列满足字典序尽可能大 MEX 指…...
2024/4/17 11:59:32 - navicat连接centos7上mysql:2003-Can't connect to MySQL server (10060)
问题解决步骤: 1、参考http://jingyan.baidu.com/article/95c9d20dac9040ec4f75617a.html,发现是防火墙未关闭; 2、关闭并禁止firewall开机启动:停止:systemctl stop firewalld.service禁止开机启动:systemctl disable firewalld.service转载于:https://www.cnblogs.com/…...
2024/4/25 18:13:54 - CSS基本语法(二)
文章目录CSS基本语法(二)八、CSS复合选择器1、后代选择器\*\*2、子选择器3、并集选择器\*\*4、伪类选择器链接伪类选择器:focus伪类选择器总结九、CSS的元素显示样式1、概念2、块元素3、行内元素4、行内块元素5、元素显示模式的转换6、垂直居中十、CSS背…...
2024/4/20 7:27:21 - Python06-2容器
容器篇 变量这种存储单个数据的容器,也会提供光存储多个数据容器 – 线性容器:具备顺序 数组(Array):连续内存 链表(List):Python list的容器,底层使用的就是双…...
2024/4/20 12:54:16 - Python基础知识盲点(根据廖雪峰老师的教程网站学习)
之前主要使用Java和C作为自己的编程语言,最近想要全面的学习python,所以开始从基础学起,我是根据廖雪峰老师的[python网站学习](https://www.liaoxuefeng.com/wiki/1016959663602400)学习的,之前用python做项目的时候学习过一点&a…...
2024/4/14 8:17:31 - java库函数 实现 数组清零
只能对一维数组用: Arrays.setAll(b, x->0);二维数组,需要加个循环 for(int i0;i<10;i)Arrays.setAll(b[i], x->0);...
2024/4/14 8:17:41 - 数组部分方法
push 可以接受一个或者多个参数,将参数追加到数组的尾部,返回添加后的数组的长度,原数组会发生改变。 pop() 从数组尾部删除一个元素,返回这个被删除的元素,原数组发生改变。 unshift() 可以接受一个或者多个参数…...
2024/4/16 2:42:21 - 常用RBG
颜色RBG值绿色51 153 0蓝色64 180 164黄色253 152 2...
2024/4/18 21:58:57 - Python中os模块和moviepy模块的基础使用与教学
1、os模块 我们今天需要使用的模块有两个,一个是os模块,这是Python内置的与操作系统功能和文件系统相关的模块,那么我么看一看os模块的操作都有哪些吧! 有一些不好记的操作,我都把英文全名写了出来,懂英文应…...
2024/4/14 8:17:46 - 2020Android面试心得,已拿到offer,附学习笔记+面试整理+进阶书籍
4.SingleInstance:这个是SingleTask加强本,系统会为要启动的Activity单独开一个栈,这个栈里只有它,适用新开Activity和app能独立开的,如系统闹钟,微信的视频聊天界面不知道是不是,知道的同学告诉…...
2024/4/14 8:17:26
最新文章
- http作业
综合练习:请给openlab搭建web网站 网站需求: 1.基于域名www.openlab.com可以访问网站内容为 welcome to openlab!!! 2.给该公司创建三个子界面分别显示学生信息,教学资料和缴费网站,基于www.openlab.com/student 网站访问学生信息…...
2024/5/1 6:40:32 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 《前端防坑》- JS基础 - 你觉得typeof nullValue === null 么?
问题 JS原始类型有6种Undefined, Null, Number, String, Boolean, Symbol共6种。 在对原始类型使用typeof进行判断时, typeof stringValue string typeof numberValue number 如果一个变量(nullValue)的值为null,那么typeof nullValue "?" const u …...
2024/4/30 7:41:56 - ASP.NET Core 标识(Identity)框架系列(一):如何使用 ASP.NET Core 标识(Identity)框架创建用户和角色?
前言 ASP.NET Core 内置的标识(identity)框架,采用的是 RBAC(role-based access control,基于角色的访问控制)策略,是一个用于管理用户身份验证、授权和安全性的框架。 它提供了一套工具和库&…...
2024/4/30 2:01:46 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/29 23:16:47 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/30 18:14:14 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/29 2:29:43 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/30 18:21:48 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/28 1:28:33 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/30 9:43:09 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/25 18:39:16 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/28 1:34:08 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/29 20:46:55 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/30 22:21:04 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/1 4:32:01 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/27 23:24:42 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/28 5:48:52 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/30 9:42:22 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/30 9:43:22 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/30 9:42:49 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下: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