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

SpringBoot3-深入理解自动配置类的原理(尚硅谷SpringBoot3-雷神)

文章目录

  • 目录
    • 了解自动配置
  • 一、导入对应场景的Mean依赖:
    • 1、引入依赖
      • **找到自动配置类的所有配置都存放在哪里**
  • 二、编写主程序:@SpringBootApplication
    • 观察源码时所需要知道的几个核心注解:
    • 1、观察@SpringBootApplication源码都做了什么
  • 三、xxxxAutoConfiguration自动配置类
  • 四、编写主程序:@SpringBootApplication


目录

什么是自动配置类:简单的进行分析就是自动的将你需要的类或者jar包进行导入,无需自己配置,而在springBoot中就很好的实现了此功能,我们再写springBoot时一般只需要四步:
1、导入对应场景的Mean依赖
2、编写主程序:@SpringBootApplication
3、xxxxAutoConfiguration自动配置类
4、编写具体的业务代码…

了解自动配置

1、包扫描规则
在springBoot中约定,默认包扫描规则为:只会扫描在主程序(也就是@SpringBootApplication 所标记的类)所在的包及其子包的所有文件,【当然也是可以进行自定义范围的,但是springBoot约定是如此,没有什么特殊要求以约定为准】
2、配置的默认值
在springBoot中,若是在配置文件中的属性都与配置类中的对象一一对应(这时也称此类为属性类),这时只要在配置文件(application.properties/yml/xml)设置了某一个属性的值,此时这个属性的配置类对象的默认值就是对应当前在配置文件中所设置的属性值。
类如我在配置文件中设置了server.port = 8888,此时所对应的**属性类(ServerProperties)**中的对象port就变成了8888,[原理就是调用了ServerProperties中的setPort方法],配置文件中没有写的属性类中的对象,则以SpringBoot官方所约定默认值为准
3、按需加载配置
虽然在spring-boot-dependencies包中有所有场景的配置,但是只有导入对应的场景才会导入对应场景所需要的配置,并不是全部导入。

一、导入对应场景的Mean依赖:

1、引入依赖

这里以javaweb演示:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

找到自动配置类的所有配置都存放在哪里

步骤:
1:找到spring-boot-starter文件(此文件是所有的场景① 所需要依赖的核心场景启动器
2、核心场景启动器引入了spring-boot-autoconfigure包。
3、找到spring-boot-autoconfigure②,所在的jar包位置
:场景是什么:以web场景举例,假设你需要进行编写web项目,在SSM中需要进行导入许多的依赖,而在这里你只需要进行导入web场景,则会直接进行导入这个场景所需要的所有依赖】
:此spring-boot-autoconfigure包中就存放了所有配置类。也就是说只要此包可以生效,即SpringBoot官方写好的整合功能就生效了。
图示:在这里插入图片描述

题外话(依赖管理):为什么没有标记版本号

首先进行观察此依赖会发现并没有写web的版本号,肯定会有人问为什么可以不写,我们可以看到pom.xml文件顶部的<artifactId>spring-boot-starter-parent</artifactId>这串代码可以说明此文件的依赖于spring-boot-starter-parent pom文件,点进去之后又可以看到此依赖又依赖了<artifactId>spring-boot-dependencies</artifactId>,在点进去之后往下滑就可以看到了许多的<XXX.version>…此文件就是进行约定了依赖的版本(注意这里只约定了官方所提供的依赖,而第三方的依赖并没有进行约定)
简单来说:yourPom --(依赖于)–> spring-boot-starter-paren --(依赖于)–> spring-boot-dependencies [而在此pom文件就有约定官方所提供的依赖版本]
图示:
1、你的mean依赖文件:
在这里插入图片描述
2、进入到spring-boot-starter-paren文件:
在这里插入图片描述
3、进入到spring-boot-dependencies文件:在这里插入图片描述

二、编写主程序:@SpringBootApplication

观察源码时所需要知道的几个核心注解:

  1. @Configuration、@SpringBootConfiguration
    - 这两个注解都是将类标识为配置类(所以本质上并没有区别),从而替代了spring的配置xml文件
  2. @Bean、@Scope
    - ①:@Bean:替代了Bean标签
    - ②:@Scope:将bean对象转换为(单实例/多实例)

1和2一般是搭配使用,代码演示:
(这里的实体类代码就不写了,你们可以自己随便写几个实体类进行测试)

配置类代码:

@Configuration//标记为配置类,替代spring配置xml文件
//@SpringBootConfiguration//标记为springBoot的配置类,替代spring配置xml文件
public class configClass1 {@Bean("user001")//替代了Bean标签,默认方法名就是bean对象的name,也可以直接在注解中设置namepublic user user(){//这里就是创建bean对象,user为你创建实体类user user = new user();user.setName("张三");user.setAge(31);user.setGender("男");return user;}
}

在spring中创建bean并完成上述的所有操作:
在这里插入图片描述

测试(主程序代码):

@SpringBootApplication
public class Boot3Demo2Application {public static void main(String[] args) {ConfigurableApplicationContext ioc = SpringApplication.run(Boot3Demo2Application.class, args);/*输出所有ioc容器中所有bean对象name*/for (String name : ioc.getBeanDefinitionNames()) {System.out.println(name);}/*以user类型查询所有的bean对象*/String[] forType = ioc.getBeanNamesForType(user.class);for (String s : forType) {System.out.println(s);}/*判断这两个的指定的对象是否相同(也就可以证明是否是单实例)*/Object user1 = ioc.getBean("user001");Object user2 = ioc.getBean("user001");//若是为false则为多实列,若为true则为单实列System.out.println(user1 == user2);}}

执行结果如下图:
在这里插入图片描述

  • @Import
    • 它也可可以创建bean对象,只需要在配置类上面进行标记即可
@Import(FastsqlException.class)//bean对象name默认为全类名
@Configuration//标记为配置类
public class configClass1 {}

条件注解:

  • @ConditionalOnClass:如果类路径中存在这个类,则触发指定行为
  • @ConditionalOnMissingClass:如果类路径中不存在这个类,则触发指定行为
  • @ConditionalOnBean:如果容器中存在这个Bean(组件),则触发指定行为
  • @ConditionalOnMissingBean:如果容器中不存在这个Bean(组件),则触发指定行为

这几个注解只需要知道什么意思即可,所以就不演示了

属性绑定:

属性绑定就是将创建的bean对象,与配置文件中的属性进行绑定
@ConfigurationProperties
将配置文件中以特定值为前缀的进行与当前标记的类进行绑定(前提是此类必须在容器中)
@EnableConfigurationProperties
标记在配置类中
1.开启pig的属性绑定功能、2.将pig放到ioc容器中
用法如图:
在这里插入图片描述

1、观察@SpringBootApplication源码都做了什么

在**@SpringBootApplication**中是由三个注解组成的:
1、@SpringBootConfiguration :标记为springBoot配置类
2、@ComponentScan:包扫描的注解

3、@EnableAutoConfiguration:用来自动配置的注解
1、首先查看@EnableAutoConfiguration的源码(在SpringBootApplication里面中标记它的注解)
2、在此注解@EnableAutoConfiguration上有着一个@Import,它导入了一个类:{AutoConfigurationImportSelector.class},进入到里面,并找到一个方法,其方法名为:getAutoConfigurationEntry,在这两处进行断点查看:
在这里插入图片描述
3、跳过第一个断点查看属性configurations
会发现加载了许多的配置类,而这些就是我们所需的配置。
在这里插入图片描述
4、那这些配置类从哪里来的?
其实就是从我们上面所说的spring-boot-dependencies包
可以直接找到方法:getCandidateConfigurations,如图:
在这里插入图片描述
在找到autoConfigurationAnnotation并查找此类的全类名:
在这里插入图片描述
此时就可以得知这个jar包的路径为:
META-INF/spring/org.springframework.boot.autoconfigure.imports
这个路径需要再library中进行查找:
在这里插入图片描述
此时就可以知道springBoot是如何进行有效的导入配置。

三、xxxxAutoConfiguration自动配置类

打开存放配置路径的文件(也就是上面最后所打开的文件):在此文件中可以发现,许多的xxxxAutoConfiguration自动配置类,我们可以任意的查看自动配置类可以发现有许多的@Bean注解。
由此可以说明:使用@Bean 在IOC容器中存放了一堆组件

我们可以先打开EmbeddedWebServerFactoryCustomizerAutoConfiguration自动配置类观察一下,看到tomcatWebServerFactoryCustomizer(翻译;TomcatWeb服务器工厂定制器)方法中的返回值:serverProperties(服务器属性)
在这里插入图片描述
我们可以直接进入到此类中,可以发现此类就是一个属性类,且还可以发现一个规律就是所有以XXXProperties结尾的都是一个属性类。

我们可以在EmbeddedWebServerFactoryCustomizerAutoConfiguration类中查看注解,会发现一个我们上面所说的注解:@EnableConfigurationProperties({ServerProperties.class}),
作用:
1、开启ServerProperties类的属性绑定功能
2、将ServerProperties放到ioc容器中
由此可以推断:每个自动配置类都可能有这个注解@EnableConfigurationProperties(XXXProperties.class),用来把配置文件中指定前缀的属性值封装到 xxxProperties属性类中
这里要是没找到的话可以带开这几个自动配置类
ReactiveMultipartAutoConfigurationHttpEncodingAutoConfigurationThymeleafAutoConfiguration…都可以找到EnableConfigurationProperties注解,且都将属性类作为参数

由上面的内容就可以进行推断:
IOC容器中放的所有组件(就是在自动配置类中所标记@Bean的方法) 的一些 核心参数(就是我们在配置文件中可以修改的属性例如:端口),都来自于xxxProperties。
xxxProperties都是和配置文件绑定
此时:只需要改配置文件的值,核心组件的底层参数都能修改

四、编写主程序:@SpringBootApplication

到这里就已经完成了自动装配等事情…


以上是我看尚硅谷SpringBoot3-雷神,在加上自己的一些理解而写的,要是理解的话可以看此视频进行更深入的理解

相关文章:

SpringBoot3-深入理解自动配置类的原理(尚硅谷SpringBoot3-雷神)

文章目录 目录了解自动配置 一、导入对应场景的Mean依赖&#xff1a;1、引入依赖**找到自动配置类的所有配置都存放在哪里** 二、编写主程序&#xff1a;SpringBootApplication观察源码时所需要知道的几个核心注解&#xff1a;1、观察SpringBootApplication源码都做了什么 三、…...

MOE怎样划分不同专家

MOE怎样划分不同专家 目录 MOE怎样划分不同专家MOE划分不同专家的方法LLM模型拆分的方法**子模块拆分法**:**多头拆分法**:**层间拆分法****基于功能的拆分法**Python代码实现MOE划分不同专家以及LLM模型拆分的方法及举例如下: MOE划分不同专家的方法 ffn前馈神经网络 独立…...

NLP CH3复习

CH3 3.1 几种损失函数 3.2 激活函数性质 3.3 哪几种激活函数会发生梯度消失 3.4 为什么会梯度消失 3.5 如何解决梯度消失和过拟合 3.6 梯度下降的区别 3.6.1 梯度下降&#xff08;GD&#xff09; 全批量&#xff1a;在每次迭代中使用全部数据来计算损失函数的梯度。计算成本…...

Pyecharts SVG 标记使用笔记

Pyecharts SVG 标记使用笔记 在数据可视化中&#xff0c;图表的标记点常常用于突出显示重要数据点。Pyecharts 提供了丰富的标记点配置选项&#xff0c;其中使用 SVG 路径来自定义标记点的样式是一个非常强大的功能。本文将详细介绍如何在 Pyecharts 中使用 SVG 路径来定制标记…...

C++ 文件操作

文件操作 // 文件操作 // 程序运行时产生的数据都属于临时数据&#xff0c;程序结束后临时数据会被操作系统释放 // 通过文件操作可以将数据持久化 // c 中文件操作需要包含头文件 <fstream>// 文件类型分为两种&#xff1a; // 文本文件&#xff1a; 文件以文本的ASCII…...

享元模式详解

享元模式详解 一、定义 享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;旨在通过共享对象来尽量减少内存的使用。它通过将重复使用的对象分离成共享和非共享部分&#xff0c;达到复用的目的&#xff0c;从而有效节省内存。具体来说&#x…...

数据库中的并发控制

并发操作带来的数据不一致性 1、并发控制:为了保证事务的隔离性和一致性&#xff0c;数据库管理系统需要对并发操作进行正确调度 并发控制的主要技术有:封锁、时间戳、乐观控制法、多版本并发控制等 并发操作带来的数据不一致性: ① 丟失修改:两个事务 T1 和 T2 读入同一数据…...

【软考网工笔记】计算机基础理论与安全——计算机硬件知识

计算机分级存储体系 计算机分级存储体系目前最常用的是三级存储体系。 CPU——CaChe&#xff08;高速缓存&#xff09;——主存——辅存 其中 Cache 是用于解决存取速度不够快&#xff0c;辅存是用于解决存储容量不够大&#xff0c;二者结合可在容量和速度实现提升的情况下尽可…...

SpringBoot 多种生产打包方式详解

Springboot 多种生产打包方式简介 生产上发布 Spring Boot 项目时&#xff0c;流程颇为繁琐且低效。但凡代码有一丁点改动&#xff0c;就得把整个项目重新打包部署&#xff0c;耗时费力不说&#xff0c;生成的 JAR 包还特别臃肿&#xff0c;体积庞大。每次更新项目&#xff0c…...

WebSocket 安全实践:从认证到加密

在前三篇文章中,我们深入探讨了 WebSocket 的基础原理、服务端开发和客户端实现。今天,让我们把重点放在安全性上,看看如何构建一个安全可靠的 WebSocket 应用。我曾在一个金融项目中,通过实施多层安全机制,成功防御了多次恶意攻击尝试。 安全挑战 WebSocket 应用面临的主要安…...

实现单例模式的五种方式

如何实现一个单例 1、构造器需要私有化 2、提供一个私有的静态变量 3、暴露一个公共的获取单例对象的接口 需要考虑的两个问题 1、是否支持懒加载 2、是否线程安全 1、饿汉式 public class EagerSingleton {private static final EagerSingleton INSTANCE new EagerSi…...

【Go学习】-01-6-数据库泛型新特性

【Go学习】-01-6-数据库泛型新特性 1 数据库操作1.1 操作mysql1.1.1 Insert1.1.2 Select1.1.3 Update1.1.4 Delete1.1.5 sql事务 1.2 go操作Redis 2 泛型2.1 非泛型函数2.2 泛型函数2.3 泛型类型2.3.1 泛型结构体2.3.2 泛型接口 2.4 泛型约束2.5 泛型切片和映射2.5.1 泛型切片2…...

算法学习(22)—— BFS解决最短路问题

关于最短路问题 最短路问题是“图论”里非常重要的一类问题&#xff0c;涉及的内容非常多&#xff0c;在这个专题里&#xff0c;我们主要讲“边权为1的最短路问题”&#xff0c;因为这个比较基础比较简单而关于啥是“边权为1的最短路问题”&#xff0c;我们通过下面的例子来讲…...

【双层模型】考虑供需双侧的综合能源双层优化模型

目录 主要内容 内容研究 1.模型简介 2 程序释义 部分代码 运行结果 下载链接 主要内容 该程序实现一个综合能源系统的优化调度双层模型&#xff0c;上下层分别采用差分进化算法和规划算法进行求解。模型考虑了多种能源设备&#xff0c;包括燃气轮机、燃气锅炉、风电…...

【读书笔记/源码】How Tomcat Works 笔记- c11~c13

chapter11: standardwrapperchapter12: 无程序 第十章 安全性 servlet容器是通过一个名为验证器的阀来支持安全限制的。当servlet容器启动时&#xff0c;验证器阀会被添加到Context容器的管道中。 验证器阀会调用Context容器的领域对象的authenticate()方法&#xff0c;传入…...

Electron快速入门——跨平台桌面端应用开发框架

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…...

Vision Transformer模型详解(附pytorch实现)

写在前面 最近&#xff0c;我在学习Transformer模型在图像领域的应用。图像处理任务一直以来都是深度学习领域的重要研究方向&#xff0c;而传统的卷积神经网络已在许多任务中取得了显著的成绩。然而&#xff0c;近年来&#xff0c;Transformer模型由于其在自然语言处理中的成…...

中国区域创新创业指数IRIEC数据(省级、地市级)1990-2020年-社科数据

中国区域创新创业指数IRIEC数据&#xff08;省级、地市级&#xff09;1990-2020年-社科数据https://download.csdn.net/download/paofuluolijiang/90028728 https://download.csdn.net/download/paofuluolijiang/90028728 中国区域创新创业指数&#xff08;IRIEC&#xff09;…...

Elasticsearch:减少 Elastic 容器镜像中的 CVE(常见的漏洞和暴露)

作者&#xff1a;来自 Elastic Maxime Greau 在这篇博文中&#xff0c;我们将讨论如何通过在 Elastic 产品中切换到最小基础镜像并优化可扩展漏洞管理程序的工作流程来显著减少 Elastic 容器镜像中的常见漏洞和暴露 (Common Vulnerabilities and Exposures - CVEs)。 基于 Chai…...

webpack02

webpack中常用loader postcss-loader 在css-loader之前&#xff0c;对css进行一些操作&#xff0c;&#xff0c;&#xff0c;比如统一加前缀&#xff0c;&#xff0c;或者是重置样式&#xff0c;&#xff0c;&#xff0c; 这个postcss-loader会自己去找 postcss工具&#xff0…...

腾讯云更改用户为root

最近买了台99元一年的2核的云服务器&#xff0c;方便学习一些java开发中间件&#xff0c;以及部署一些项目。 1.设置root用户密码 sudo passwd root 2.修改配置文件 ll /etc | grep ssh cd /etc/ssh/ ls vim sshd_config 输入/PasswordAuthentication 寻找 输入:set nu 再按下…...

Excel导入导出-若依版本

最终效果 1、导出 1、在实体类上加注解 Excel(name “客户类型名称”) ToString AllArgsConstructor NoArgsConstructor public class UserType extends BaseEntity2 implements Serializable {Excel(name "客户类型ID", cellType Excel.ColumnType.NUMERIC…...

【Qt】快速添加对应类所需的头文件包含

快速添加对应类所需的头文件包含 一&#xff0c;简介二&#xff0c;操作步骤 一&#xff0c;简介 本文介绍一下&#xff0c;如何快速添加对应类所需要包含的头文件&#xff0c;可以提高开发效率&#xff0c;供参考。 二&#xff0c;操作步骤 以QTime类为例&#xff1a; 选中…...

基于服务器部署的综合视频安防系统的智慧快消开源了。

智慧快消视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。国产化人工智能“…...

浅谈棋牌游戏开发流程七:反外挂与安全体系——守护游戏公平与玩家体验

一、前言&#xff1a;为什么反外挂与安全这么重要&#xff1f; 对于任何一款线上棋牌游戏而言&#xff0c;公平性和玩家安全都是最重要的核心要素之一。如果游戏环境充斥着各式各样的外挂、作弊方式&#xff0c;不仅会毁坏玩家体验&#xff0c;更会导致游戏生态崩塌、口碑下滑…...

Laravel操作ElasticSearch

在Laravel项目中操作ElasticSearch可以通过以下步骤来实现&#xff0c;通常会借助相应的ElasticSearch客户端扩展包。 ### 安装ElasticSearch客户端包 在Laravel项目中&#xff0c;常用的是 elasticsearch/elasticsearch 这个PHP客户端库来与ElasticSearch进行交互&#xff0c…...

缓存-文章目录

关于缓存系列文章&#xff1a; 缓存学习总结1&#xff08;缓存分类&#xff09; 缓存学习总结2&#xff08;服务器本地缓存&#xff09; 缓存学习总结3&#xff08;服务器内存缓存&#xff09;推荐使用 缓存学习总结4&#xff08;分布式缓存&#xff09; 关于redis系列文章…...

安装教程:慧集通集成平台(DataLinkX)智能体客户端安装操作(Linux/windows/mac)

1.下载客户端 使用提供的账号登录集成平台后台(https://www.datalinkx.cn/),点击左侧菜单栏【智能体】→【智能体】进入到智能体列表界面&#xff0c;在该界面我们找到功能栏中的下载按钮点击则会弹出下载界面&#xff0c;在该界面我们可以选择不同的系统操作系统来下载对应版…...

解决vmware虚拟机和宿主机之间不能复制粘贴

在虚拟机内执行一下命令 /usr/bin/vmware-user 更多解决方案 https://www.cnblogs.com/wutou/p/17629408.html...

由源程序到运行

由源程序到运行 第一步&#xff1a;编写源程序 assume cs:codesg codesg segmentmov ax,0123Hmov bx,0456Hadd ax,bxadd ax,axmov ax,4c00hint 21h codesg ends end第二步&#xff1a;进行编译 进入到编译目录 编译 .asm文件生成目标文件&#xff08;.obj&#xff09; m…...

Java-JDBC的使用

目录 一、JDBC(java数据库连接)&#xff1a;java database connector 二、使用JDBC的步骤 三、加条件查询 四、预处理&#xff08;防止SQL注入&#xff09; 五、Statement和PreparedStatement的优略 六、将数据中的数据查询出来后需要保存在一个集合中&#xff0c;方便前端…...

如何优化亚马逊广告以提高ROI?

在竞争激烈的亚马逊市场中&#xff0c;优化广告以提高投资回报率&#xff08;ROI&#xff09;是卖家的关键任务。以下是一些实用的策略&#xff1a; 一、精准的关键词研究与选择 深入了解产品特性和目标受众 详细分析产品的功能、用途、优势和适用人群。例如&#xff0c;如果你…...

身是菩提树,心如明镜台;时时勤拂拭,莫使惹尘埃。

神秀: 身是菩提树&#xff0c;心如明镜台&#xff1b;时时勤拂拭&#xff0c;莫使惹尘埃。 第一个毛病1&#xff1a; 在神秀看来,修行就是要保持我们本来干净的心, 跟外部世界的灰尘之间的隔绝状态,始终保持这种隔绝, 尘世是什么&#xff1f; 尘就是烦恼,人世间无处不是烦恼&a…...

如何修复富士相机卡错误并恢复卡数据

富士相机以其卓越的图像质量而闻名&#xff0c;但不幸的是&#xff0c;其 SD 卡错误可能会意外发生&#xff0c;导致数据丢失和摄影会话中断。 在本指南中&#xff0c;我们将引导您了解常见的富士相机 SD 卡错误、如何修复这些错误&#xff0c;以及如何有效地从损坏的卡中恢复…...

呼叫中心中间件实现IVR进入排队,判断排队超时播放提示音

文章目录 [TOC](文章目录) 前言需求排队结束原因 联系我们实现步骤1. 调用http接口返回动作2. 启用拨号方案 前言 需求 呼叫中心需要实现调用IVR接口进入排队&#xff0c;如果是因为等待超时导致退出排队的&#xff0c;那就播放一段提示音再挂断通话&#xff1b;其他的情况就…...

数据分析思维(八):分析方法——RFM分析方法

数据分析并非只是简单的数据分析工具三板斧——Excel、SQL、Python&#xff0c;更重要的是数据分析思维。没有数据分析思维和业务知识&#xff0c;就算拿到一堆数据&#xff0c;也不知道如何下手。 推荐书本《数据分析思维——分析方法和业务知识》&#xff0c;本文内容就是提取…...

SpringBoot3动态切换数据源

背景 随着公司业务战略的发展&#xff0c;相关的软件服务也逐步的向多元化转变&#xff0c;之前是单纯的拿项目&#xff0c;赚人工钱&#xff0c;现在开始向产品化\服务化转变。最近雷袭又接到一项新的挑战&#xff1a;了解SAAS模型&#xff0c;考虑怎么将公司的产品转换成多租…...

Java虚拟机面试题:内存管理(上)

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

WPF通过反射机制动态加载控件

Activator.CreateInstance 是 .NET 提供的一个静态方法&#xff0c;它属于 System 命名空间。此方法通过反射机制根据提供的类型信息。 写一个小demo演示一下 要求&#xff1a;在用户反馈界面点击建议或者评分按钮 弹出相应界面 编写MainWindow.xmal 主窗体 <Window x:C…...

前端学习-操作元素属性(二十三)

前言 假期快乐&#xff0c;大家加油 操作元素属性 操作元素常用属性 还可以通过 JS 设置/修改标签元素属性&#xff0c;比如通过 src更换 图片最常见的属性 比如:href、title、src等语法:对象.属性 值 const pic document.querySelector(img);pic.src ./images/b0.jpgp…...

Javascript 编写的一个红、黄、绿灯交替变亮

为了创建一个简单但功能完整的交通灯程序&#xff0c;我们将使用 HTML、CSS 和 JavaScript 来实现红、黄、绿三种颜色按照规定的顺序循环显示。这个例子将确保灯光按照红 -> 绿 -> 黄的顺序循环&#xff0c;并且可以调整每个灯光的持续时间以模拟真实的交通灯行为。 效果…...

基于64QAM的载波同步和定时同步性能仿真,包括Costas环和gardner环

目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下&#xff08;完整代码运行后无水印&#xff09;&#xff1a; 仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论知识概要 载波同步是…...

小于n的最大数 - 贪心算法 - C++

字节经典面试题 给定一个整数n&#xff0c;并从1~9中给定若干个可以使用的数字&#xff0c;根据上述两个条件&#xff0c;得到每一位都为给定可使用数字的、最大的小于整数n的数&#xff0c;例如&#xff0c;给定可以使用的数字为 {2,3,8} 三个数&#xff1a;给定 n3589&#x…...

leetcode(hot100)4

解题思路&#xff1a;双指针思想 利用两个for循环&#xff0c;第一个for循环把所有非0的全部移到前面&#xff0c;第二个for循环将指针放在非0的末尾全部加上0。 还有一种解法就是利用while循环双指针条件&#xff0c;当不为0就两个指针一起移动 &#xff0c;为0就只移动右指针…...

【Pandas】pandas Series xs

Pandas2.2 Series Indexing, iteration 方法描述Series.get()用于根据键&#xff08;索引标签&#xff09;从 Series 中获取值Series.at用于快速访问标量值&#xff08;单个元素&#xff09;的访问器Series.iat用于快速访问标量值&#xff08;单个元素&#xff09;的访问器Se…...

【linux内核分析-存储】EXT4源码分析之“文件删除”原理【七万字超长合并版】(源码+关键细节分析)

EXT4源码分析之“文件删除”原理【七万字超长合并版】&#xff08;源码关键细节分析&#xff09;&#xff0c;详细的跟踪了ext4文件删除的核心调用链&#xff0c;分析关键函数的细节&#xff0c;解答了开篇中提出的三个核心疑问。 文章目录 提示前言全文重点索引1.源码解析1.1 …...

一个在ios当中采用ObjectC和opencv来显示图片的实例

前言 在ios中采用ObjectC编程利用opencv来显示一张图片&#xff0c;并简单绘图。听上去似乎不难&#xff0c;但是实际操作下来&#xff0c;却不是非常的容易的。本文较为详细的描述了这个过程&#xff0c;供后续参考。 一、创建ios工程 1.1、选择ios工程类型 1.2、选择接口模…...

使用Python实现基于强化学习的游戏AI:打造智能化游戏体验

友友们好! 我的新专栏《Python进阶》正式启动啦!这是一个专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会找到: ● 深入解析:每一篇文章都将…...

STM32G0B1 can Error_Handler 解决方法

问题现象 MCU上电&#xff0c;发送0x13帧数据固定进入 Error_Handler 硬件介绍 MCU :STM32G0B1 can:NSI1042 tx 接TX RX 接RX 折腾了一下午&#xff0c;无解&#xff0c;问题依旧&#xff1b; 对比测试 STM32G431 手头有块G431 官方评估版CAN 模块&#xff1b; 同样的…...

洛谷 P2511 [HAOI2008] 木棍分割

第一问很简单&#xff0c;第二问 d p dp dp。 &#xff08;真是哪都能混个 d p dp dp&#xff09; 参考题解 #include <bits/stdc.h>using namespace std;int read() {int x 0, f 1; char c getchar();while (c < 0 || c > 9) {if (c -) f -1; c getcha…...