【Spring篇】IOC/DI配置管理第三方bean

news2025/2/24 6:35:10

🍓系列专栏:Spring系列专栏

🍉个人主页:个人主页

目录

一、案例:数据源对象管理

1.环境准备

2.实现Druid管理

3.实现C3P0管理

二、加载properties文件

1.第三方bean属性优化

2.读取单个属性

3.注意事项  

三、核心容器

1.环境准备

2.容器  

1.容器的创建方式

2.Bean的三种获取方式

3.容器类层次结构

4.BeanFactory的使用

3.核心容器总结

1.容器相关

2.bean相关

3.依赖注入相关

四、图书推荐


一、案例:数据源对象管理

在这一节中,我们将通过一个案例来学习下对于第三方bean该如何进行配置管理。 以后我们会用到很多第三方的bean,本次案例将使用咱们前面提到过的数据源Druid(德鲁伊)C3P0来配置学习下。

1.环境准备

  • 创建一个Maven项目

  • 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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.itheima</groupId>
    <artifactId>spring_09_datasource</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.10.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.16</version>
        </dependency>
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
    </dependencies>
</project>
  •  resources下添加spring的配置文件applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>
  • 编写一个运行类App
public class App {
public static void main(String[] args) {
ApplicationContext ctx = new
ClassPathXmlApplicationContext("applicationContext.xml");
}
}

2.实现Druid管理

思路分析

需求 : 使用 Spring IOC 容器来管理 Druid 连接池对象
1. 使用第三方的技术,需要在 pom.xml 添加依赖【前面已导入】
2. 在配置文件中将【第三方的类】制作成一个 bean ,让 IOC 容器进行管理
3. 数据库连接需要基础的四要素 驱动 连接 用户名 密码 ,【如何注入】到对应的 bean
4. IOC 容器中获取对应的 bean 对象,将其打印到控制台查看结果

步骤1:配置第三方bean

applicationContext.xml配置文件中添加DruidDataSource的配置

<!--    管理DruidDataSource对象-->
 <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/spring_db"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
    </bean>
说明 :
driverClassName: 数据库驱动
url: 数据库连接地址
username: 数据库连接用户名
password: 数据库连接密码
数据库连接的四要素要和自己使用的数据库信息一致。
步骤2 : IOC 容器中获取对应的 bean 对象
public class App {
    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        DataSource dataSource = (DataSource) ctx.getBean("dataSource");
        System.out.println(dataSource);



    }
}

做完案例后,我们可以将刚才思考的两个问题答案说下 :
  • 第三方的类指的是什么?
DruidDataSource
  • 如何注入数据库连接四要素?
setter注入

3.实现C3P0管理

完成了 DruidDataSource 的管理,接下来我们再来加深下练习,这次我们来管理 C3P0 数据源,具体的实现步骤是什么呢?
步骤1 : 配置第三方 bean
applicationContext.xml 配置文件中添加配置
 <bean  class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.jdbc.Driver"/>
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/spring_db"/>
        <property name="user" value="root"/>
        <property name="password" value="root"/>
        <property name="maxPoolSize" value="1000"/>
    </bean>
注意 :
  • ComboPooledDataSource的属性是通过setter方式进行注入
  • 想注入属性就需要在ComboPooledDataSource类或其上层类中有提供属性对应的setter方法
  • C3P0的四个属性和Druid的四个属性是不一样的

运行程序

二、加载properties文件

上节中我们已经完成两个数据源 druid C3P0 的配置,但是其中包含了一些问题,我们来分析下 :
  • 这两个数据源中都使用到了一些固定的常量如数据库连接四要素,把这些值写在Spring的配置文件中不利于后期维护
  • 需要将这些值提取到一个外部的properties配置文件中
  • Spring框架如何从配置文件中读取属性值来配置就是接下来要解决的问题。

1.第三方bean属性优化

实现思路

需求 : 将数据库连接四要素提取到 properties 配置文件, spring 来加载配置信息并使用这些信息
来完成属性注入。
1. resources 下创建一个 jdbc.properties( 文件的名称可以任意 )
5 2. 将数据库连接四要素配置到配置文件中
3. Spring 的配置文件中加载 properties 文件
4. 使用加载到的值实现属性注入
其中第 3 4 步骤是需要大家重点关注,具体是如何实现。

实现步骤  

步骤 1: 准备 properties 配置文件
resources 下创建一个 jdbc.properties 文件 , 并添加对应的属性键值对
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/spring_db
jdbc.username=root
jdbc.password=root
步骤 2: 开启 context 命名空间
applicationContext.xml 中开 context 命名空间
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
</beans>
步骤 3: 加载 properties 配置文件
在配置文件中使用 context 命名空间下的标签来加载 properties 配置文件
<context:property-placeholder location="jdbc.properties"/>
步骤 4: 完成属性注入
使用 ${key} 来读取 properties 配置文件中的内容并完成属性注入
    <context:property-placeholder location="jdbc.properties"/>
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
至此,读取外部 properties 配置文件中的内容就已经完成。

2.读取单个属性

实现思路

对于上面的案例,效果不是很明显,我们可以换个案例来演示下:

需求 : properties 配置文件中读取 key name 的值,并将其注入到 BookDao 中并在 save 方法中进行打印。
1. 在项目中添加 BookDao BookDaoImpl
2. BookDaoImpl 添加一个 name 属性并提供 setter 方法
3. jdbc.properties 中添加数据注入到 bookDao 中打印方便查询结果
4. applicationContext.xml 添加配置完成配置文件加载、属性注入 (${key})

 实现步骤

步骤 1: 在项目中添对应的类
BookDao BookDaoImpl 类,并在 BookDaoImpl 类中添加 name 属性与 setter 方法
public interface BookDao {
    public void save();
}
public class BookDaoImpl implements BookDao {
    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public void save() {
        System.out.println("book dao save ..." + name);
    }
}
步骤 2: 完成配置文件的读取与注入
applicationContext.xml 添加配置, bean 的配置管理 读取外部 properties 依赖注入 :
  <context:property-placeholder location="jdbc.properties"/>
        <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
            <property name="name" value="${jdbc.driver}"/>
        </bean>
步骤 3: 运行程序
App 类中,从 IOC 容器中获取 bookDao 对象,调用方法,查看值是否已经被获取到并打印控制台
public class App {
    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");


        BookDao bookDao = (BookDao) ctx.getBean("bookDao");
        bookDao.save();

    }
}

3.注意事项  

至此,读取 properties 配置文件中的内容就已经完成,但是在使用的时候,有些注意事项 :

问题一:键值对的keyusername引发的问题

1.properties中配置键值对的时候,如果key设置为username

username=root666
2. applicationContext.xml 注入该属性
   <context:property-placeholder location="jdbc.properties"/>
        <bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl">
            <property name="name" value="${username}"/>
        </bean>
3. 运行后,在控制台打印的却不是 root666 ,而是自己电脑的用户名

4. 出现问题的原因是 <context:property - placeholder/> 标签会加载系统的环境变量,而且环境
变量的值会被优先加载,如何查看系统的环境变量 ?
public class AppSystemProperties {
    public static void main(String[] args) {
        Map<String, String> env = System.getenv();
        System.out.println(env);

    }
}
大家可以自行运行,在打印出来的结果中会有一个 USERNAME=XXX[ 自己电脑的用户名称 ]
5. 解决方案
    <context:property-placeholder location="jdbc.properties" system-properties-mode="NEVER"/>
system-properties-mode: 设置为 NEVER, 表示不加载系统属性,就可以解决上述问题。
当然还有一个解决方案就是避免使用 username 作为属性的 key
问题二:当有多个properties配置文件需要被加载,该如何配置?
1. 调整下配置文件的内容,在 resources 下添加 jdbc.properties , jdbc2.properties , 内容如
:
jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/spring_db
jdbc.username=root
jdbc.password=root
jdbc2.properties
username=root666
2. 修改 applicationContext.xml
    <!--方式一 -->
    <context:property-placeholder
            location="jdbc.properties,jdbc2.properties" system-properties-mode="NEVER"/>
    <!--方式二-->
    <context:property-placeholder location="*.properties" system-properties-mode="NEVER"/>
    <!--方式三 -->
    <context:property-placeholder location="classpath:*.properties"
                                  system-properties-mode="NEVER"/>
    <!--方式四-->
    <context:property-placeholder location="classpath*:*.properties"
                                  system-properties-mode="NEVER"/>
说明 :
  • 方式一:可以实现,如果配置文件多的话,每个都需要配置
  • 方式二: *.properties代表所有以properties结尾的文件都会被加载,可以解决方式一的问题,但是不标准
  • 方式三:标准的写法,classpath:代表的是从根路径下开始查找,但是只能查询当前项目的根路径
  • 方式四:不仅可以加载当前项目还可以加载当前项目所依赖的所有项目的根路径下的properties配置文件

三、核心容器

前面已经完成bean与依赖注入的相关知识学习,接下来我们主要学习的是IOC容器中的核心容器

这里所说的核心容器,大家可以把它简单的理解为ApplicationContext,前面虽然已经用到过,但

是并没有系统的学习,接下来咱们从以下几个问题入手来学习下容器的相关知识:

  • 如何创建容器?
  • 创建好容器后,如何从容器中获取bean对象?
  • 容器类的层次结构是什么?
  • BeanFactory是什么?

1.环境准备

在学习和解决上述问题之前,先来准备下案例环境:

  • 创建一个Maven项目
  • pom.xml添加Spring的依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
</dependencies>
  • resources下添加applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl"/>
</beans>
  • 添加BookDao和BookDaoImpl类

public interface BookDao {
    public void save();
}
public class BookDaoImpl implements BookDao {
public void save() {
System.out.println("book dao save ..." );
}
}
  • 创建运行类App

public class App {
public static void main(String[] args) {
ApplicationContext ctx = new
ClassPathXmlApplicationContext("applicationContext.xml");
BookDao bookDao = (BookDao) ctx.getBean("bookDao");
bookDao.save();
}
}

最终创建好的项目结构如下:

2.容器  

1.容器的创建方式

案例中创建ApplicationContext的方式为:

ApplicationContext ctx = new
ClassPathXmlApplicationContext("applicationContext.xml");

这种方式翻译为:类路径下的XML配置文件

除了上面这种方式,Spring还提供了另外一种创建方式为:

ApplicationContext ctx = new
FileSystemXmlApplicationContext("applicationContext.xml");

这种方式翻译为:文件系统下的XML配置文件

使用这种方式,运行,会出现如下错误:

从错误信息中能发现,这种方式是从项目路径下开始查找applicationContext.xml配置文件的,所 以需要将其修改为:对应的绝对路径

 说明:大家练习的时候,写自己的具体路径。 这种方式虽能实现,但是当项目的位置发生变化后,代码也需要跟着改,耦合度较高,不推荐使用。

2.Bean的三种获取方式

方式一,就是目前案例中获取的方式:

 BookDao bookDao = (BookDao) ctx.getBean("bookDao");

这种方式存在的问题是每次获取的时候都需要进行类型转换,有没有更简单的方式呢?

方式二:

BookDao bookDao = ctx.getBean("bookDao",BookDao.class);

这种方式可以解决类型强转问题,但是参数又多加了一个,相对来说没有简化多少。

方式三:

 BookDao bookDao = ctx.getBean(BookDao.class);

这种方式就类似我们之前所学习依赖注入中的按类型注入。必须要确保IOC容器中该类型对应的bean对象只能有一个。

3.容器类层次结构

(1)在IDEA中双击shift ,输入BeanFactory

 (2)点击进入BeanFactory类,ctrl+h,就能查看到如下结构的层次关系

从图中可以看出,容器类也是从无到有根据需要一层层叠加上来的,大家重点理解下这种设计思想。

4.BeanFactory的使用

使用BeanFactory来创建IOC容器的具体实现方式为:

public class AppForBeanFactory {
public static void main(String[] args) {
Resource resources = new ClassPathResource("applicationContext.xml");
BeanFactory bf = new XmlBeanFactory(resources);
BookDao bookDao = bf.getBean(BookDao.class);
bookDao.save();
}
}
为了更好的看出 BeanFactory ApplicationContext 之间的区别,在 BookDaoImpl 添加如下构造
函数 :
public class BookDaoImpl implements BookDao {
public BookDaoImpl() {
System.out.println("constructor");
}
public void save() {
System.out.println("book dao save ..." );
}
}
如果不去获取 bean 对象,打印会发现:
  • BeanFactory是延迟加载,只有在获取bean对象的时候才会去创建
  • ApplicationContext是立即加载,容器加载的时候就会创建bean对象
  • ApplicationContext要想成为延迟加载,只需要按照如下方式进行配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" lazyinit="true"/>
</beans>

3.核心容器总结

1.容器相关

容器创建的两种方式
  • ClassPathXmlApplicationContext[掌握]
  • FileSystemXmlApplicationContext[知道即可]
获取 Bean 的三种方式
  • getBean("名称"):需要类型转换
  • getBean("名称",类型.class):多了一个参数
  • getBean(类型.class):容器中不能有多个该类的bean对象
上述三种方式,各有各的优缺点,用哪个都可以。
容器类层次结构
  • 只需要知晓容器的最上级的父接口为 BeanFactory即可
BeanFactory
  • 使用BeanFactory创建的容器是延迟加载
  • 使用ApplicationContext创建的容器是立即加载
  • 具体BeanFactory如何创建只需要了解即可。

2.bean相关

 其实整个配置中最常用的就两个属性idclass

scope init-method destroy-method 框起来的原因是,后面注解在讲解的时候还会用到,
所以大家对这三个属性关注下。

3.依赖注入相关

笔记来自:黑马程序员SSM框架教程

四、图书推荐

  《Windows PowerShell自动化运维大全》由微软最有价值专家、微软TechEd优秀讲师徐鹏著作,多年经验毫无保留分享,一本书完全讲透Windows PowerShell自动化运维所有核心知识点,赠送同步视频学习教程,助你从运维初级工程师转向高级运维工程师!一本书精通Windows PowerShell自动化运维!

本书从基础的 PowerShell 命令开始,先后讲述了基础命令、模块、脚本的编写等相关知识。同时为了让大家更快地理解和掌握 PowerShell 的环境配置和编写,我们使用系统内置的 PowerShell ISE 开发环境进行 PowerShell 代码的开发和运行。为了照顾很多基础薄弱的读者,在进行代码案例演示时都使用了 15 行以内的代码。

本书可作为学校培训与企业培训的基本学习教程和工具书,相信通过本书的学习,读者可以更快地理解 PowerShell在日常生活及企业内的应用,为读者在自动化运维的道路上助力。

徐鹏,微软最有价值专家、微软TechEd优秀讲师、《PowerQuery从入门到精通》作者。先后就职于宏基企业服务部、微软中国有限公司,为多家全球500强企业提供微软全系列产品培训、顾问咨询及架构优化服务。

 

🍓本次送 4 本书 ,评论区抽3位小伙伴送书🍓

活动时间:截止到 2023-05-02 14:00:00

抽奖方式:利用程序进行抽奖。

参与方式:关注博主、点赞、收藏,评论区评论 "五一假期,码不停息!"

迫不及待的小伙伴也可以访问下面的链接了解详情:

京东自营链接:Windows PowerShell自动化运维大全

🍓 获奖名单🍓

名单公布时间: 2023-05-02 14:00:00

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/469440.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux|进程间通信如何加锁

进程间通信有一种[共享内存]方式&#xff0c;大家有没有想过&#xff0c;这种通信方式中如何解决数据竞争问题&#xff1f;我们可能自然而然的就会想到用锁。但我们平时使用的锁都是用于解决线程间数据竞争问题&#xff0c;貌似没有看到过它用在进程中&#xff0c;那怎么办&…

【Linux】进程概念与fork初识——if与else竟然能够同时执行?!

文章目录 &#x1f490;专栏导读&#x1f490;文章导读&#x1f337;进程是什么&#x1f337;进程的描述——PCB&#x1f337;进程的组织&#x1f337;如何查看进程&#x1f337;如何通过系统调用查看进程PID&#x1f337;通过系统调用创建进程&#x1f33a;认识fork&#x1f3…

TuGraph 开源数据库体验

TuGraph 开源数据库体验 文章目录 TuGraph 开源数据库体验1. 简单介绍2. 可视化界面体验&#xff1a;查询界面&#xff1a;数据建模&#xff1a;数据导入&#xff1a; 3. 体验心得&#xff1a; 1. 简单介绍 TuGraph 是蚂蚁集团自主研发的大规模图计算系统&#xff0c;提供图数…

大数据技术之SparkSQL

第1章 Spark SQL概述 1.1 什么是Spark SQL 1&#xff09;Spark SQL是Spark用于结构化数据&#xff08;Structured Data&#xff09;处理的Spark模块。 1.2 为什么要有Spark SQL 1.3 Spark SQL原理 1.3.1 什么是DataFrame &#xff08;1&#xff09;DataFrame是一种类似RDD的分…

统计学习方法第四章——朴素贝叶斯法

x.1 前言 朴素贝叶斯法是基于贝叶斯定理与特征条件独立假设的分类方法。是通过给定training dataset学习联合概率分布的方法&#xff0c;是一种生成方法。 x.2 使用贝叶斯定理做分类 使用贝叶斯定理做分类&#xff0c;相比较于朴素贝叶斯即丢除特征条件独立假设这个条件。 …

MySQL主从复制详细介绍

一、主从复制的目的 ​ MySQL内建的复制功能是构建基于MySQL的大规模、高性能应用的基础&#xff0c;复制功能的目的是构建高性能的应用&#xff0c;同时也是高可用性、可扩展性、灾难恢复、备份以及数据仓库等工作的基础。比较常见的用途有以下几种&#xff1a; 数据分布&am…

APP渗透—查脱壳、反编译、重打包签名

APP渗透—查脱壳、反编译、重打包签名 1. 前言1.1. 其它 2. 安装工具2.1. 下载jadx工具2.1.1. 下载链接2.1.2. 执行文件 2.2. 下载apktool工具2.2.1. 下载链接2.2.2. 测试 2.3. 下载dex2jar工具2.3.1. 下载链接 3. 查壳脱壳3.1. 查壳3.1.1. 探探查壳3.1.2. 棋牌查壳 3.2. 脱壳3…

【MiniGPT-4】手把手教部署

最近MiniGPT4开源了&#xff0c;获得了很多网友好评&#xff0c;在Github上获得了1.6万的star&#xff0c;它相比ChatGPT3.5来说&#xff0c;可以实现图片识别&#xff0c;生成想要的文本效果&#xff0c;理解能力非常强。 论文地址&#xff1a;https://github.com/Vision-CAIR…

【大数据之Hadoop】二十一、MapReduce、HDFS、Yarn配合工作(作业提交全过程)

1-11、26为Yarn&#xff1b;12-17为HDFS写数据流程&#xff1b;18-25、27-31为MapReduce&#xff1b;19-25为Shuffle&#xff1b;32-41为HDFS写数据流程。 &#xff08;0&#xff09;MR程序提交到客户端所在的节点&#xff0c;在集群模式中运行MR程序&#xff0c;当运行到主函…

数学建模第七天:数学建模算法篇之插值及MATLAB实现

目录 一、前言 1、引例 2、拟合定义 3、拟合与插值的关系 二、拟合 1、线性最小二乘法求解 ①思路 ②解法 2、MATLAB对线性最小二乘拟合的实现 ①函数说明 ②求解例题 3、MATLAB实现非线性曲线拟合 ①lsqcurvefit函数 ②代码求解 4、MATLAB实现非线性最小二乘拟…

华为2023暑期笔试(2-2)——最近最少使用(LRU, Least recently used)缓存算法

目录 题目内容解答要求&#xff08;解答要求限制了只能使用LRU&#xff09;输入描述样例思路代码 题目内容 你是一名网络工程师&#xff0c;你正在为一家云计算公司开发一个虚拟机管理系统。你的系统需要为每个虚拟机分配一个唯一的ID&#xff0c;用来标识和通信。为了实现这个…

C++基础demo(C++入门基础案例)

C入门基础案例学习与了解 demo16 计算年份是否为闰年&#xff08;各种运算符结合&#xff09;demo17 打印ASCII码表demo18 求完数demo19 密码验证&#xff08;if……else&#xff09;demo20 图书管理&#xff08;if…else if…else&#xff09;demo21 信号灯&#xff08;和--&a…

python中使用ctypes库调用使用MMDeploy C++ SDK编译得到的dll文件时,出现WinError126的解决方法

之前&#xff0c;通过以下两篇文章&#xff0c;着重介绍了&#xff0c;使用openMMLab开发的MMDeploy库对MMxx系列仓库训练得到的权重pth转换得到的onnx&#xff0c;并分别使用python SDK和C SDK进行调用的详细步骤&#xff1a; 使用MMDeploy&#xff08;预编译包&#xff09;转…

Enterprise:如何在 Elastic 企业搜索引擎中添加对更多语言的支持

作者&#xff1a;Ioana-Alina Tagirta Elastic App Search 中的引擎&#xff08;engines&#xff09;使你能够索引文档并提供开箱即用的可调搜索功能。 默认情况下&#xff0c;引擎支持预定义的语言列表。 如果你的语言不在该列表中&#xff0c;此博客将说明如何添加对其他语言…

RabbitMQ笔记

一、MQ与RabbitMQ概述 1. MQ简述 MQ&#xff08;Message Queue&#xff09;消息队列&#xff0c;是基础数据结构中 “先进先出” 的一种数据结构&#xff0c;也是在消息的传输过程中保存消息的容器&#xff08;中间件&#xff09;&#xff0c;多用于分布式系统之间进行通信。 …

[Pandas] 设置DataFrame的index索引起始值为1

导入数据 import pandas as pddf pd.DataFrame([[liver,E,89,21,24,64],[Arry,C,36,37,37,57],[Ack,A,57,60,18,84],[Eorge,C,93,96,71,78],[Oah,D,65,49,61,86]], columns [name,team,Q1,Q2,Q3,Q4]) df 上述DataFrame中的index索引列默认是从0开始的&#xff0c;那么我们…

【Spark】Spark是什么?能干什么?有什么特点?

一、什么是Spark 官网&#xff1a;http://spark.apache.org Apache Spark™ is a multi-language engine for executing data engineering, data science, and machine learning on single-node machines or clusters. Spark是一种快速、通用、可扩展的大数据分析引擎&#xf…

MATLAB连续LTI系统的时域分析(十)

目录 1、实验目的&#xff1a; 2、实验内容&#xff1a; 1、实验目的&#xff1a; 1&#xff09;掌握利用MATLAB对系统进行时域分析的方法&#xff1b; 2&#xff09;掌握连续时间系统零输入响应的求解方法&#xff1b; 3&#xff09;掌握连续时间系统零状态响应、冲激响应和…

AD9739配置解析与数据输出指南

1 概述 本文用于AD9737芯片的配置使用情况&#xff0c;以及数据输出的格式说明情况&#xff0c;数据速率的计算情况等。 AD9739是ADI公司的一款14BIT&#xff0c;可达2.5GSPS采样率的DAC芯片。 2 AD9739的性能 支持的输入数据速率&#xff1a;1.6GSPS TO 2.5GSPS. industry lea…