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

【SSM详细教程】-03-Spring参数注入

 精品专题:

01.《C语言从不挂科到高绩点》课程详细笔记

https://blog.csdn.net/yueyehuguang/category_12753294.html?spm=1001.2014.3001.5482icon-default.png?t=O83Ahttps://blog.csdn.net/yueyehuguang/category_12753294.html?spm=1001.2014.3001.5482

02. 《SpringBoot详细教程》课程详细笔记

https://blog.csdn.net/yueyehuguang/category_12789841.html?spm=1001.2014.3001.5482icon-default.png?t=O83Ahttps://blog.csdn.net/yueyehuguang/category_12789841.html?spm=1001.2014.3001.548203.《SpringBoot电脑商城项目》课程详细笔记

https://blog.csdn.net/yueyehuguang/category_12752883.html?spm=1001.2014.3001.5482icon-default.png?t=O83Ahttps://blog.csdn.net/yueyehuguang/category_12752883.html?spm=1001.2014.3001.548204.《VUE3.0 核心教程》课程详细笔记

https://blog.csdn.net/yueyehuguang/category_12769996.html?spm=1001.2014.3001.5482icon-default.png?t=O83Ahttps://blog.csdn.net/yueyehuguang/category_12769996.html?spm=1001.2014.3001.5482

================================

||   持续分享系列教程,关注一下不迷路  ||

||   视频教程:小破站:墨轩大楼             ||

================================

        在Spring IOC容器中,当我们需要向bean对象中注入参数时,可以一些参数注入的手段向指定属性中注入特定的值,本小节就带着大家一起看看参数注入的方式。

1. 注入基本值

        <value /> 元素可以通过字符串来指定属性或构造器参数的值。容器将字符串从java.lang.String 类型转换为实际的属性或者参数类型后给Bean对象注入。

添加Hero类,定义好属性,并使用lombok添加get和set方法

@Data
public class Hero {private String name;private String job;private String sex;
}

在applicationContext.xml中配置Hero的Bean

 <bean id="myHero" class="com.moxuan.spring01.day02.Hero"><property name="name"><value>孙悟空</value></property><property name="job"><value>打野</value></property><property name="sex" value="男"></property></bean>

        由上面配置可以看出,当要注入基本值时,可以使用<value> 元素注入,也可以使用value属性进行注入。注入后,测试代码如下:

/**
* 测试注入基本值*/
@Test
public void test01(){AbstractApplicationContext context =new ClassPathXmlApplicationContext("applicationContext.xml");Hero hero = context.getBean("myHero",Hero.class);System.out.println(hero);}

运行效果:

2. 注入Bean对象

注入Bean对象,定义格式有内部Bean和外部Bean两种。

2.1 注入内部Bean对象

给英雄添加一个武器类

/*** 武器类*/
@Data
public class Weapon {String name;public Weapon(){this.name = "赤手空拳";}
}

给Hero添加Weapon类型的属性,作为英雄的武器。

@Data
public class Hero {private String name;private String job;private String sex;private Weapon weapon;
}

在applicationContext.xml中使用内部Bean的方式,给Hero的weapon属性注入值

<bean id="myHero" class="com.moxuan.spring01.day02.Hero"><property name="name"><value>孙悟空</value></property><property name="job"><value>打野</value></property><property name="sex" value="男"></property><property name="weapon"><!--            使用内部Bean对象注入--><bean class="com.moxuan.spring01.day02.Weapon"></bean></property>
</bean>

编写测试方法:

@Test
public void test01(){AbstractApplicationContext context =new ClassPathXmlApplicationContext("applicationContext.xml");Hero hero = context.getBean("myHero",Hero.class);System.out.println(hero);}

运行效果

2.2 注入外部Bean对象

修改applicationContext.xml如下

<!--配置武器Bean-->
<bean id="myWeapon" class="com.moxuan.spring01.day02.Weapon"><property name="name" value="金箍棒"></property>
</bean>
<bean id="myHero" class="com.moxuan.spring01.day02.Hero"><property name="name"><value>孙悟空</value></property><property name="job"><value>打野</value></property><property name="sex" value="男"></property><!--ref引用外部Bean对象,通过外部Bean对象的id或者name属性值引用--><property name="weapon" ref="myWeapon"></property><!--        <property name="weapon">--><!--            使用内部Bean对象注入--><!--            <bean class="com.moxuan.spring01.day02.Weapon"></bean>--><!--        </property>-->
</bean>

测试方法不变,运行效果如下图所示:

3. 注入集合

Spring容器可以通过<list/>,<set/>,<map/>以及<props/>元素来定义和设置与Java类型中对应List,Set,Map及Properties的属性。

3.1 注入list集合

首先给英雄添加技能列表,和toString方法,具体代码如下:

package com.moxuan.spring01.day02;import lombok.Data;import java.util.List;@Datapublic class Hero {private String name; // 名称private String job;  // 职业private String sex;  // 性别private Weapon weapon;  //武器private List<String> skills; // 技能列表@Overridepublic String toString() {StringBuilder sb = new StringBuilder();sb.append("英雄名称:"+name+"\n");sb.append("英雄职业:"+job+"\n");sb.append("英雄性别:"+sex+"\n");sb.append("英雄武器:"+weapon.getName()+"\n");sb.append("英雄技能:\n");for (String skill :skills){sb.append("\t"+skill+"\n");}return sb.toString();}}

在applicationContext.xml中使用<list/> 为英雄对象注入技能列表:

<bean id="myHero" class="com.moxuan.spring01.day02.Hero"><property name="name"><value>孙悟空</value></property><property name="job"><value>打野</value></property><property name="sex" value="男"></property><!--ref引用外部Bean对象,通过外部Bean对象的id或者name属性值引用--><property name="weapon" ref="myWeapon"></property><property name="skills"><list><value>1技能:护身法咒</value><value>2技能:斗战冲锋</value><value>3技能:如意金箍</value><value>被动技能:大圣神威</value></list></property>
</bean>

测试方法不变:

 @Test
public void test01(){AbstractApplicationContext context =new ClassPathXmlApplicationContext("applicationContext.xml");Hero hero = context.getBean("myHero",Hero.class);System.out.println(hero);}

3.2 注入set集合

首先给英雄添加克制英雄集合,restrainHeros,并在toString方法中添加克制英雄集合输出的代码,具体如下:

package com.moxuan.spring01.day02;import lombok.Data;import java.util.List;
import java.util.Set;@Data
public class Hero {private String name; // 名称private String job;  // 职业private String sex;  // 性别private Weapon weapon;  //武器private List<String> skills; // 技能列表private Set<String> restrainHeros;// 克制英雄集合@Overridepublic String toString() {StringBuilder sb = new StringBuilder();sb.append("英雄名称:"+name+"\n");sb.append("英雄职业:"+job+"\n");sb.append("英雄性别:"+sex+"\n");sb.append("英雄武器:"+weapon.getName()+"\n");sb.append("英雄技能:\n");for (String skill :skills){sb.append("\t"+skill+"\n");}sb.append("克制英雄:\n");for(String hero:restrainHeros){sb.append("\t"+hero+"\n");}return sb.toString();}
}

在applicationContext.xml中使用<set>为克制英雄注入值,具体如下:

<!--克制英雄-->
<property name="restrainHeros"><set><value>鲁班七号</value><value>黄忠</value><value>伽罗</value></set>
</property>

测试代码不变,运行效果如下:

3.3 注入map集合

修改Hero类,添加关系链,并修改toString代码,如下:

package com.moxuan.spring01.day02;import lombok.Data;import java.util.List;
import java.util.Map;
import java.util.Set;@Data
public class Hero {private String name; // 名称private String job;  // 职业private String sex;  // 性别private Weapon weapon;  //武器private List<String> skills; // 技能列表private Set<String> restrainHeros;// 克制英雄集合private Map<String,String> relationship; // 关系链@Overridepublic String toString() {StringBuilder sb = new StringBuilder();sb.append("英雄名称:"+name+"\n");sb.append("英雄职业:"+job+"\n");sb.append("英雄性别:"+sex+"\n");sb.append("英雄武器:"+weapon.getName()+"\n");sb.append("英雄技能:\n");for (String skill :skills){sb.append("\t"+skill+"\n");}sb.append("克制英雄:\n");for(String hero:restrainHeros){sb.append("\t"+hero+"\n");}sb.append("关系链:\n");Set<String> keys = relationship.keySet();for (String key:keys){sb.append("\t"+key+": "+relationship.get(key)+"\n");}return sb.toString();}
}

在applicationContext.xml中给关系链使用<map/>进行注入值。

  <!--关系网--><property name="relationship"><map><entry key="师傅" value="金蝉"></entry><entry key="师弟" value="猪八戒"></entry><entry key="cp" value="露娜"></entry><entry key="大哥" value="牛魔"></entry></map></property>

测试代码不变,运行效果如下:

3.4 注入properties

首先给Hero类添加本局队友属性,并修改toString方法如下:

package com.moxuan.spring01.day02;import lombok.Data;import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;@Data
public class Hero {private String name; // 名称private String job;  // 职业private String sex;  // 性别private Weapon weapon;  //武器private List<String> skills; // 技能列表private Set<String> restrainHeros;// 克制英雄集合private Map<String,String> relationship; // 关系链private Properties team; // 团队成员@Overridepublic String toString() {StringBuilder sb = new StringBuilder();sb.append("英雄名称:"+name+"\n");sb.append("英雄职业:"+job+"\n");sb.append("英雄性别:"+sex+"\n");sb.append("英雄武器:"+weapon.getName()+"\n");sb.append("英雄技能:\n");for (String skill :skills){sb.append("\t"+skill+"\n");}sb.append("克制英雄:\n");for(String hero:restrainHeros){sb.append("\t"+hero+"\n");}sb.append("关系链:\n");Set<String> keys = relationship.keySet();for (String key:keys){sb.append("\t"+key+": "+relationship.get(key)+"\n");}sb.append("本局队友:\n");Set<Object> friends = team.keySet();for (Object fr:friends){String frStr = (String)fr;sb.append("\t"+frStr+": "+team.getProperty(frStr));}return sb.toString();}
}

在applicationContext.xml使用<props> 为英雄Bean对象注入team属性值,具体如下:

 <!--本局队友-->
<property name="team"><props><prop key="上路" >项羽</prop><prop key="中路" >安其拉</prop><prop key="下路" >后羿</prop><prop key="辅助" >明世隐</prop></props>
</property>

测试类不变,运行效果如下:

3.5 引用方式注入集合

注入集合的时候除了可以采用上面在Bean内部注入方式以外,也可以使用下面这种使用外部引用方式注入,修改applicationContext.xml如下:

<util:list id="skill_list"><value>1技能:护身法咒</value><value>2技能:斗战冲锋</value><value>3技能:如意金箍</value><value>被动技能:大圣神威</value>
</util:list><util:set id="restrain_heros"><value>鲁班七号</value><value>黄忠</value><value>伽罗</value>
</util:set><util:map id="relationship_map"><entry key="师傅" value="金蝉"></entry><entry key="师弟" value="猪八戒"></entry><entry key="cp" value="露娜"></entry><entry key="大哥" value="牛魔"></entry>
</util:map><util:properties id="team_props"><prop key="上路" >项羽</prop><prop key="中路" >安其拉</prop><prop key="下路" >后羿</prop><prop key="辅助" >明世隐</prop>
</util:properties><bean id="ref_hero" class="com.moxuan.spring01.day02.Hero"><property name="name" value="孙悟空"></property><property name="job" value="打野"></property><property name="sex" value="男"></property><!--ref引用外部Bean对象,通过外部Bean对象的id或者name属性值引用--><property name="weapon" ref="myWeapon"></property><!--通过外部list的id引入外部的list集合--><property name="skills" ref="skill_list"></property><!--通过外部set的id引入外部的set集合--><property name="restrainHeros" ref="restrain_heros"></property><!--通过外部map的id引入外部的map集合--><property name="relationship" ref="relationship_map"></property><!--通过外部properties的id引入外部的properties--><property name="team" ref="team_props"></property>
</bean>

修改测试程序,使用id为ref_hero的bean创建对象,代码如下:

@Test
public void test02(){AbstractApplicationContext context =new ClassPathXmlApplicationContext("applicationContext.xml");Hero hero = context.getBean("ref_hero",Hero.class);System.out.println(hero);}

运行效果如图所示:

4. 注入Spring表达式

Spring引入了一种表达式语言,这和统一的EL在语法上很相似,这种表达式语言可以用于定义基于XML和注解配置的Bean,注入一个properties文件信息。

首先我们在项目的resources目录中新建一个weapon.properties文件,内容如下:

name="红莲斗篷"
price=1830
description="唯一被动-献祭:每秒对身边300范围的敌人造成(自身最大生命值2%)的法术伤害,对小兵额外造成(自身最大生命值2%)的法术伤害"

修改Weapon类如下,新增price和description两个属性,具体如下:

package com.moxuan.spring01.day02;import lombok.Data;/*** 武器类*/
@Data
public class Weapon {private String name;private int price;private String description;public Weapon(){this.name = "赤手空拳";}
}

修改applicationContext.xml文件,添加weapon的Bean,为属性分别注入值(使用Spring表达式)。具体如下:

<util:properties id="weapon_props" location="classpath:weapon.properties"></util:properties>
<bean id="weapon01" class="com.moxuan.spring01.day02.Weapon"><property name="name" value="#{weapon_props.name}"></property><property name="price" value="#{weapon_props.price}"></property><property name="description" value="#{weapon_props.description}"></property>
</bean>

添加测试方法,代码如下:

@Test
public void test03(){AbstractApplicationContext context =new ClassPathXmlApplicationContext("applicationContext.xml");Weapon weapon = context.getBean("weapon01",Weapon.class);System.out.println(weapon);
}

运行效果如下所示:

5. 注入null或空字符串

Spring将属性的空参数当作空String,首先给Weapon添加一个专精英雄masteryHero属性,具体如下:

package com.moxuan.spring01.day02;import lombok.Data;/*** 武器类*/
@Data
public class Weapon {private String name;private int price;private String description;private String masteryHero;// 专精英雄public Weapon(){this.name = "赤手空拳";}
}

以下applicationContext.xml中给masteryHero设置了空String值:

<util:properties id="weapon_props" location="classpath:weapon.properties"></util:properties>
<bean id="weapon01" class="com.moxuan.spring01.day02.Weapon"><property name="name" value="#{weapon_props.name}"></property><property name="price" value="#{weapon_props.price}"></property><property name="description" value="#{weapon_props.description}"></property><property name="masteryHero" value=""></property>
</bean>

运行效果如下图:

如果需要注入null值,可以使用<null/>元素,具体如下:

<util:properties id="weapon_props" location="classpath:weapon.properties"></util:properties>
<bean id="weapon01" class="com.moxuan.spring01.day02.Weapon"><property name="name" value="#{weapon_props.name}"></property><property name="price" value="#{weapon_props.price}"></property><property name="description" value="#{weapon_props.description}"></property><property name="masteryHero" ><null/></property>
</bean>

运行效果,如下图所示:

相关文章:

【SSM详细教程】-03-Spring参数注入

精品专题&#xff1a; 01.《C语言从不挂科到高绩点》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12753294.html?spm1001.2014.3001.5482https://blog.csdn.net/yueyehuguang/category_12753294.html?spm1001.2014.3001.5482 02. 《SpringBoot详细教程》课…...

深度学习 %matplotlib inline

%matplotlib inline 是在 Jupyter Notebook 中使用的一个魔法命令&#xff0c;主要用于配置 Matplotlib 图形的显示方式。具体来说&#xff0c;这个命令的作用是将 Matplotlib 生成的图形直接嵌入到 notebook 中&#xff0c;而不是在弹出的窗口中显示。 使用方法 在 Jupyter …...

RT-Thread线程的定义和属性

目录 概述 1 RT-Thread线程定义 1.1 优先级设定方法 1.2 内存管理 1.2.1 RT-Thread的线程类别 1.2.2 RT-Thread的线程调度 2 线程重要属性 2.1 线程栈 2.2 线程状态 2.3 线程优先级 2.4 时间片 概述 本文主要介绍RT-Thread线程的定义和属性&#xff0c;其包括线程的…...

【大模型问答测试】大模型问答测试脚本实现(第二版)——接入pytest与代码解耦

背景 接上一篇&#xff0c;【大模型问答测试】大模型问答测试脚本实现&#xff08;第一版&#xff09;。 在实现自动化的时候&#xff0c;原先把很多方法与request请求写在一块了&#xff0c;趁着目前实现接口数量较少&#xff0c;决定对代码进行解耦&#xff0c;并且清晰目录…...

Windows模拟电脑假死之键盘鼠标无响应

Windows模拟电脑假死之键盘鼠标无响应 1. 场景需求 模拟Windows电脑假死&#xff0c;失去键盘鼠标响应。 2. 解决方案 采用Windows系统提供的钩子(Hook) API 拦截系统鼠标键盘消息。 3. 示例程序 【1】. 创建MFC对话框项目 新建一个MFC应用程序项目&#xff0c;项目名称…...

一文详解线程池

什么是线程池&#xff1f; 线程池&#xff1a;就是一个容纳多个线程的容器&#xff0c;其中的线程可以反复使用&#xff0c;省去了频繁创建线程对象的操作&#xff0c;无需反复创建线程而消耗过多资源。 为什么用线程池&#xff1f; 线程池的优势&#xff1a;线程池做的工作…...

网际报文协议ICMP及ICMP重定向实例详解2

之前在一个项目中遇到了与ICMP重定向相关的问题&#xff0c;因为缺乏对ICMP相关内容的了解&#xff0c;排查了很长一段时间才查出来。本文给大家简要地介绍一下ICMP及ICMP重定向相关的内容。 1、ICMP的概念 ICMP&#xff08;Internet Control Message Protocol&#xff09;网际…...

CSS 总结

CSS 总结 引言 CSS(层叠样式表)是网页设计中不可或缺的一部分,它用于控制网页的布局和样式。本文将对CSS的基本概念、关键特性、常用属性以及最佳实践进行总结,旨在帮助读者深入理解并有效运用CSS。 CSS基本概念 1. 什么是CSS? CSS是一种样式表语言,用于描述HTML或X…...

C语言_指针_进阶

引言&#xff1a;在前面的c语言_指针初阶上&#xff0c;我们了解了简单的指针类型以及使用&#xff0c;下面我们将进入更深层次的指针学习&#xff0c;对指针的理解会有一个极大的提升。从此以后&#xff0c;指针将不再是难点&#xff0c;而是学习底层语言的一把利器。 本章重点…...

chat_gpt回答:python使用writearray写tiff速度太慢,有什么快速的方法吗

如果你在使用 Python 的 tifffile 库&#xff08;或类似库&#xff09;写入 TIFF 文件时速度太慢&#xff0c;以下是几个加速写入的优化方法和替代方案&#xff1a; 1. 优化文件压缩设置 TIFF 支持压缩格式&#xff0c;但压缩过程可能非常耗时。如果你不需要压缩&#xff0c;…...

【时时三省】(C语言基础)函数介绍strcat

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 strcat 字符串追加 示例&#xff1a; 比如我要把world加到hello后面去 就可以用这个 还有一种方法是这样 这两个代码的意思是一样的 只是写法不一样 写的时候要注意这些 •源字符串必须…...

ESP32C3 开发板在Linux环境下,进行JTAG 调试演示-启明云端乐鑫代理商

JTAG 调试教程 本教程主要演示 esp32c3 开发板在 linux 环境下&#xff0c;通过 vscode 的 esp-idf 插件使用 jtag 调试工具。 esp32c3 不但内置了USB-JTAG&#xff0c;还内置了USB-SERIAL&#xff0c;仅需要一根USB线即可实现下载和调试仿真。 下面演示调试仿真的过程。 创…...

《计算机视觉》—— 基于PyCharm中的dlib库实现人脸关键点定位

文章目录 1. 安装必要的库2. 下载dlib的人脸检测器和关键点预测器模型3. 编写代码 人脸关键点定位是指通过计算机视觉技术&#xff0c;识别和定位人脸图像中的关键点&#xff0c;如眼睛、鼻子、嘴巴等特定位置。这些关键点的准确定位对于人脸识别、表情分析、姿态估计等应用具有…...

c++习题34-说谎

目录 一&#xff0c;题目 二&#xff0c;思路 三&#xff0c;代码 一&#xff0c;题目 描述 ljc以自己的人格担保他最后一个回答一定是正确的&#xff0c;但并不保证其它的回答是对的。 每个数为ljc对上一个的回答&#xff0c;若为0表示说上句话是错的&#xff0c;若为…...

如何使用Android Profiler进行性能分析?

Android Profiler是Android Studio中一个功能强大的性能分析工具&#xff0c;它可以帮助开发者实时监控应用的CPU、内存、网络、电量和图形渲染等性能指标&#xff0c;从而发现并解决性能瓶颈。以下是如何使用Android Profiler进行性能分析的详细步骤和技巧。 一、准备工作 安…...

整理—MySQL

目录 NOSQL和SQL的区别 数据库三大范式 MySQL 怎么连表查询 MySQL如何避免重复插入数据&#xff1f; CHAR 和 VARCHAR有什么区别&#xff1f; Text数据类型可以无限大吗&#xff1f; 说一下外键约束 MySQL的关键字in和exist mysql中的一些基本函数 SQL查询语句的执行顺…...

临时配置linux Bridge网桥

Linux Bridge&#xff08;网桥&#xff09;是用纯软件实现的虚拟交换机&#xff0c;有着和物理交换机相同的功能&#xff0c;例如二层交换&#xff0c;MAC地址学习等。因此我们可以把tun/tap&#xff0c;veth pair等设备绑定到网桥上&#xff0c;就像是把设备连接到物理交换机上…...

【Canvas与化学】铁元素图标

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>铁元素图标Draft1</title><style type"text/css"…...

list转map常用方法

利用Collectors.toMap收集指定属性 public Map<Long, String> getIdNameMap(List<Account> accounts) {return accounts.stream().collect(Collectors.toMap(Account::getId, Account::getUsername)); } 收集对象实体本身 - 在开发过程中我们也需要有时候对自己…...

C++容器适配器的模拟实现-stack、queue、priority_queue

### 容器适配器是将容器转换到其他容器自身不方便使用的地方&#xff0c;但是就容器适配器其本身还是包装的容器&#xff0c;所以这个类模板中各个接口的实现都是调用的容器的接口&#xff0c;因为容器适配器可能适配多个容器&#xff0c;所以这个类模板的模板参数中有一个参数…...

零基础轻松拿捏!魔珐星云青少年健康运动教学数字人搭建全流程指南

大家好&#xff01;本次给大家分享一款面向青少年体育教育的AI创意实践项目——青少年健康运动教学智能数字交互系统。本项目聚焦青少年体质健康痛点&#xff0c;围绕体育教学智能化升级需求&#xff0c;打造集健康知识教学、运动动作陪练、健康知识考核、运动能力评测于一体的…...

除了排错,你可能不知道OPC Expert v8.1还能做这些:数据归档、计算与冗余实战

解锁OPC Expert v8.1的隐藏潜力&#xff1a;数据归档、实时计算与冗余架构实战指南在工业自动化领域&#xff0c;OPC Expert常被视为故障排查的"急救箱"&#xff0c;但它的能力远不止于此。当大多数工程师还在用它解决DCOM配置问题时&#xff0c;少数先行者已经用它重…...

自制射频功率计:基于AD8317芯片,成本43欧元实现1MHz-10GHz测量

1. 项目概述&#xff1a;为什么我要亲手打造一台射频功率计在无人机和模型飞行器的圈子里&#xff0c;尤其是在我们荷兰FMS Spaarnwoude俱乐部&#xff0c;合规飞行是头等大事。我给我的八轴飞行器加装了云台相机和图传系统&#xff0c;工作在5.8GHz频段。根据本地法规&#xf…...

BLE四大广播模式详解:可连接/不可连接/定向/周期广播

一、前言在低功耗蓝牙&#xff08;BLE&#xff09;开发中&#xff0c;广播&#xff08;Advertising&#xff09;是设备发现、连接建立、数据广播、设备重连的核心基石&#xff0c;所有BLE交互流程均始于广播报文的收发。不同于传统经典蓝牙&#xff0c;BLE所有广播行为标准化、…...

2026年,本地精准营销高性价比服务商来袭,你还不了解一下?

在本地商业竞争日益激烈的2026年&#xff0c;实体店面临着诸多挑战&#xff0c;引流难、成本高、复购率低等问题困扰着众多商家。而中粤&#xff08;广州&#xff09;信息科技有限公司作为本地精准营销的高性价比服务商&#xff0c;正以其独特的优势和卓越的服务&#xff0c;为…...

ROS Noetic实战:从bag包里‘抠’出雷达点云和IMU数据的保姆级教程(Ubuntu 20.04)

ROS Noetic实战&#xff1a;从bag包里提取雷达点云和IMU数据的完整指南&#xff08;Ubuntu 20.04&#xff09;在机器人开发中&#xff0c;ROS bag文件就像是一个装满珍贵数据的宝箱&#xff0c;而雷达点云和IMU数据则是其中最闪亮的宝石。作为一名长期与ROS打交道的开发者&…...

XML 服务器

XML 服务器 引言 XML(可扩展标记语言)服务器在现代互联网技术中扮演着至关重要的角色。它为数据的传输和处理提供了灵活且高效的方式。本文将深入探讨XML服务器的概念、工作原理、应用场景及其在软件开发中的重要性。 什么是XML服务器? XML服务器是一种用于存储、处理和…...

LangGraph状态机工程:构建复杂AI工作流的完整指南

传统RAG&#xff08;检索增强生成&#xff09;在处理简单的"单跳"问题时表现良好——“文章里提到了什么” “这个概念是什么意思”——但当问题涉及多个实体之间的关系、需要跨多个文档推理时&#xff0c;传统RAG就显得力不从心。GraphRAG&#xff08;Graph-based R…...

企业云盘签章技术方案:从数字签名原理到工程落地

背景 电子签章在企业云盘中的落地&#xff0c;不只是一个"上传盖章图片"的功能实现。本质上&#xff0c;它是一套涉及数字签名、PKI基础设施、文档完整性校验的综合性技术方案。本文从技术选型角度&#xff0c;说清楚企业云盘内置签章需要解决哪些问题、主流实现方案…...

超低功耗电池电压监控电路设计:从LM324到LPV324的硬件方案优化

1. 项目概述与核心需求解析在捣鼓各种电池供电的电子设备时&#xff0c;无论是自己做的无线传感器节点、便携式小工具&#xff0c;还是给孩子改装的玩具&#xff0c;有一个问题总是绕不开&#xff1a;你怎么知道电池快没电了&#xff1f;总不能每次都等到设备彻底罢工&#xff…...