Java研学-SpringBoot(二)

二 Spring Boot 介绍

1 简介

  Spring Boot是由Pivotal团队提供的全新框架,主要目标是简化Spring应用程序的配置和部署过程,减少开发者在项目搭建和配置上的工作量,让开发者能够更专注于业务逻辑的实现。它使用特定的方式来进行配置,使开发人员不再需要定义样板化的配置,致力于在快速应用开发领域成为领导者。

2 特点

  简化的配置:采用约定优于配置的方式,通过自动化配置和默认设置来简化开发者的配置工作,减少了繁琐的配置代码。

  内嵌的Web容器:内置了多种常用的Web容器,如Tomcat、Jetty、Undertow等,使构建独立的Web应用程序变得更加简单。

  自动化依赖管理:通过提供一系列的“starter”依赖,自动管理应用程序的依赖关系,从而简化了依赖管理的工作。

  强大的开发者工具:提供了丰富的开发者工具,如热部署、自动重启、自动配置报告等,提高了开发效率。

  外部化配置:支持使用外部配置文件来配置应用程序的属性,如数据库连接、日志配置等,使应用程序的配置更加灵活和可管理。

  此外,Spring Boot还提供了健康检查和监控功能,可以监控应用程序的运行状态和性能指标,并确保应用程序在生产环境中的稳定性和可靠性。

  总体而言,Spring Boot使得开发者可以更快速、更便捷地构建和部署Java应用程序,提高开发效率和项目的可维护性。它适用于各种类型的应用程序,包括Web应用、RESTful服务、批处理作业等。如需更多关于Spring Boot的详细信息,可以查阅Spring Boot的官方文档或相关教程。

三 Spring Boot 入门

1 创建 Spring Boot 工程

  Spring Boot官方提供的工具来快速构建项目。IDEA 自带该功能,但需要联网使用。注意:官方提供的构建工具默认只能选择固定的版本,有些版本之间的差异非常大,所以如果需要选择某个版本可以自行在 pom.xml 文件中修改版本。
  官网创建
官网创建
  IDEA创建
IDEA创建
在这里插入图片描述

2 选定所需依赖

        <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><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency>

3 创建 HelloController

@Controller
@RequestMapping("hello")
public class HelloController {@RequestMapping@ResponseBodypublic String hello(){System.out.println("springboot!");return "springboot!";}
}

4 运行主启动类

  SpringBoot不需配置xml文件与tomcat也可以访问http://localhost:8080/,启动类其实本质也是一个配置类

@SpringBootApplication
public class BootDemoApplication {public static void main(String[] args) {SpringApplication.run(BootDemoApplication .class, args);}
}

5 自动生成测试类

  测试类贴有 @SpringBootTest 注解,可以通过通过注解属性指定加载的配置类,若没有指定,默认加载的是贴 @SpringBootApplication 注解的配置类

@SpringBootTest
class BootDemoApplicationTests {@Autowiredprivate MyDatasource myDatasource;@Testvoid test1() {System.out.println(myDatasource);}
}

6 父工程启动器

  springboot于pom中引用了父工程启动器,因为他的存在,导入大量的Maven依赖,简化开发,可通过追踪 spring-boot-starter-parent 到 spring-boot-dependencies 查看统一依赖版本管理(依赖传递)

	<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.3.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent>

7 阿里云脚手架

  阿里云提供的脚手架,使用方式相同,更换地址即可
官网
IDEA

8 手动创建 springboot

1. 创建Maven项目
2. 导入所需依赖
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.3.RELEASE</version>
</parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>
3. 编写Controller
@Controller
public class HelloController {@RequestMapping("/hi")@ResponseBodypublic String hi() {return "Hi Spring Boot";}
}
4. 编写启动类 启动类位置必须在后台所有项目的同一级或上一级(扫描当前包以及子包)
@SpringBootApplication
// 该注解包含 @ComponentScan 进行扫描
// 该注解包含 @SpringBootConfiguration 中的 @Configuration 故为配置类
public class BootApplication {public static void main(String[] args) {SpringApplication.run(BootApplication .class, args);}
}

9 父子工程

  Spring Boot 提供了一个名为 spring-boot-starter-parent 的工程,其中对各种常用依赖(并非全部)的版本进行了管理,我们的项目需要以这个项目为父工程,解决依赖的版本问题,需要什么依赖,直接引入坐标即可
  继承是 Maven 中很强大的一种功能,继承使得子模块 pom 可以获得 parent 中的部分配置(groupId,version,dependencies,build,dependencyManagement 等),可以对子 pom 进行统一的配置和依赖管理。

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.3.RELEASE</version>
</parent>

  parent(继承:父工程标签) 项目中的 dependencyManagement 里的声明的依赖,只具有声明的作用,并不实现引入,因此子项目需要显式的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且 version 和 scope 都读取自父 pom;另外若子项目中指定了版本号,那么会使用子项目中指定的 jar 版本。
  parent 项目中的 dependencies 里声明的依赖会被所有的子项目继承。artifactId表示依赖的项目名称

  于项目中单击Module即可创建子工程,父工程的pom文件中会生成子模块的标签(告诉父亲儿子是谁)
在这里插入图片描述
在这里插入图片描述

 <!--当前父工程的所有子工程模块--><modules><module>child01</module><module>child02</module></modules>

  需在子工程pom中引入父工程标签,(告诉儿子父亲是谁),此后父工程引用的依赖,子工程也能够使用

 <!--设置当前模块的父工程--><parent><groupId>cn.tj</groupId><artifactId>parent</artifactId><version>1.0-SNAPSHOT</version></parent>

  可通过dependencyManagement 标签,对子工程引用父工程依赖做限制,只让一部分子工程可以使用父工程中的依赖

<!--依赖管理:在父工程中定义需要子工程引用的所有依赖 及版本 可以给其做选择性的引入--><dependencyManagement><dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency></dependencies></dependencyManagement>

  子工程需声明父工程的依赖才能够使用

	<!--从父工程引入已经管理的依赖的时候不需要设置版本,因为父工程已经统一管理了版本--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency>

10 启动器 Spring Boot Starter

  Spring Boot提供了很多以 spring-boot-starter-* 开头的 starter 启动器(依赖包),在使用 Spring Boot 来搭建一个项目时,只需要引入官方提供的 starter,就可以直接使用,免去了各种配置。(一个启动器中含有多个jar包)
  有关 Spring Boot Starter 命名规范,官方发布的 Starter 都遵循以下命名模式:spring-boot-starter-,其中 * 指特定的应用程序代号或名称。任何第三方提供的 Starter 都不能以 spring-boot 作为前缀,应该将应用程序代号或名称作为前缀,譬如 mybatis-spring-boot-starter。

spring-boot-starter:核心启动器,提供了自动配置,日志和 YAML 配置支持。spring-boot-starter-aop:支持使用 Spring AOPAspectJ 进行切面编程。spring-boot-starter-freemarker:支持使用 FreeMarker 视图构建 Web 应用。spring-boot-starter-test:支持使用 JUnit,测试 Spring Boot 应用。spring-boot-starter-web:支持使用 Spring MVC 构建 Web 应用,包括 RESTful 应用,使用 Tomcat 作为默认的嵌入式容器。spring-boot-starter-actuator:支持使用 Spring Boot Actuator 提供生产级别的应用程序监控和管理功能。spring-boot-starter-logging:提供了对日志的支持,默认使用 Logback

11 Web 启动器

  SpringBoot 提供的 Web 启动器,是一个快速集成 Web 模块的工具包,包含 Spring MVC,Jackson 相关的依赖,以及嵌入了 Tomcat9 服务器,默认端口 8080,Spring Boot 根据 spring-boot-starter-web 这个依赖自动引入,而且所有的版本都已经管理好,不会出现冲突。

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

12 打包独立运行

  Spring Boot 项目无论是普通应用还是 Web 应用,其打包方式都是 jar 即可(Web 应用也能打 war 包但需要额外添加许多插件)默认的 Maven 打包方式是不能正常的打包 Spring Boot 项目的,需要额外的引入打包插件,才能正常的对 Spring Boot 项目打包,以后只要拿到该 jar 包就能脱离 IDE 工具独立运行了。

<!-- pom.xml 中添加插件 -->
<build><plugins><!-- Spring Boot 打包插件 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build><!-- 使用 maven 的 package 命令进行打包 -->
<!-- 使用命令 `java -jar xxx.jar` 运行 jar 包(--server.port=80)可更改端口号 -->

四 Spring Boot 参数配置

1 参数来源

  命令行启动项目时传入的参数,如:java -jar xxx.jar --server.port=80(改端口,默认8080);
  application.properties 或者 application.yml 文件,只有application开头的才是叶子图标
  自定义配置 properties 文件
  关于其中的参数配置都可以在官方文档中找到

2 application.properties

  若项目中properties与yml文件同时存在,properties优先级更高

server.port=80
server.session-timeout=30
server.tomcat.uri-encoding=UTF-8spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/ssm
spring.datasource.username=root 
spring.datasource.password=admin

3 application.yml

  yml中的层级缩进代表父子关系,不能够随意删减,:后的空格也不能删

server:  port: 80session-timeout: 30  tomcat.uri-encoding: UTF-8  spring:  datasource:  url: jdbc:mysql://localhost:3306/crm  username: root  password: admin  driverClassName: com.mysql.jdbc.Driver

4 配置优先级

  项目中可以有多个配置文件存放在不同目录中,此时会遵循固定的优先级来处理有冲突的属性配置,优先级由高到底,高优先级的配置会覆盖低优先级的配置。下面文件优先级由高到低排序为:

  • 项目/config/application.properties (项目目录下与src同级)
  • 项目/application.properties
  • classpath:config/application.properties (resources目录下)
  • classpath:application.properties (一般在这里做配置)

5 参数属性绑定 – 自定义 properties

 ① 参数配置在自定义的 properties,XML方式配置

# db.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm
jdbc.username=root
jdbc.password=admin
<!--自定义的 properties-->
<context:property-placeholder location="classpath:db.properties" system-properties-mode="NEVER"/>

 ② JavaConfig 方式配置@PropertySource (等同上面的xml配置)+ @Value (通过key获取对应的值)从配置文件中获取数据

 // 生成配置类 自动加载 读取配置文件 获取其中的参数 创建Bean对象
@Configuration
@PropertySource("classpath:db.properties")/*替代原来读取外部配置文件的xml语句项目启动自动加载*/
public class SpringConfig {/*通过value注解取出db文件中key对应的value值该方法需要上面的读取外部配置文件语句配合*/@Value("${jdbc.driverClassName}")private String driver;@Value("${jdbc.url}")private String url;@Value("${jdbc.username}")private String username;@Value("${jdbc.password}")private String password;/*Bean对象 MyDatasource 为实体类*/@Beanpublic MyDatasource myDatasource(){MyDatasource datasource=new MyDatasource();/*对象创建后是空值需要set赋值*/datasource.setDriverClassName(driver);datasource.setUrl(url);datasource.setUsername(username);datasource.setPassword(password);return datasource;}
}

 ③ 实体类

public class MyDatasource {private String driverClassName;private String url;private String username;private String password;public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getDriverClassName() {return driverClassName;}public void setDriverClassName(String driverClassName) {this.driverClassName = driverClassName;}@Overridepublic String toString() {return "MyDatasource{" +"driverClassName='" + driverClassName + '\'' +", url='" + url + '\'' +", username='" + username + '\'' +", password='" + password + '\'' +'}';}
}

 ④ 单元测试查看是否获取成功

@SpringBootTest
class BootDemoApplicationTests {@Autowiredprivate MyDatasource myDatasource;@Testvoid test1() {System.out.println(myDatasource);}
}

6 参数属性绑定 – application.properties

 ① application.properties 中设置参数

# application.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm
jdbc.username=root
jdbc.password=admin

 ② 获取数据

// 放入spring容器 省略上面的@Bean
@Component
public class MyDatasource {// 为参数赋值 直接从application.properties中获取//@Value("${jdbc.driverClassName}")private String driverClassName;//@Value("${jdbc.url}")private String url;//@Value("${jdbc.username}")private String username;//@Value("${jdbc.password}")private String password;public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getDriverClassName() {return driverClassName;}public void setDriverClassName(String driverClassName) {this.driverClassName = driverClassName;}@Overridepublic String toString() {return "MyDatasource{" +"driverClassName='" + driverClassName + '\'' +", url='" + url + '\'' +", username='" + username + '\'' +", password='" + password + '\'' +'}';}
}

 ③ 批量获取数据 – @ConfigurationProperties 绑定对象属性
   可以把application.properties中参数的前缀编写到 @ConfigurationProperties 属性上,并且设置类属性与需要绑定的参数名相同,可实现自动绑定。
   若是使用测试类加载贴有 @Configuration 的配置类,则需要在配置类中添加@EnableConfigurationProperties 注解;若是使用测试类加载贴有 @SpringBootApplication 的配置类,则不需要。

// @ConfigurationProperties(prefix = "jdbc") 注解告诉 Spring Boot 从配置文件中查找以 jdbc为前缀的属性,并将它们绑定到这个类的字段上。
@Component  
@ConfigurationProperties(prefix = "jdbc") 
public class MyDatasource {private String driverClassName;private String url;private String username;private String password;public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getDriverClassName() {return driverClassName;}public void setDriverClassName(String driverClassName) {this.driverClassName = driverClassName;}@Overridepublic String toString() {return "MyDatasource{" +"driverClassName='" + driverClassName + '\'' +", url='" + url + '\'' +", username='" + username + '\'' +", password='" + password + '\'' +'}';}
}

   要启用配置属性的自动绑定,需要在 Spring Boot 的主类或配置类上添加 @EnableConfigurationProperties 注解,并传入你的属性类的 Class 对象。但在上述示例中,已经使用了 @Component,所以这一步是可选的。Spring Boot 会自动发现并绑定标记为 @Component 的 @ConfigurationProperties 类。

7 Environment 对象绑定属性

   当要绑定的参数过多时,直接在配置类中注入 Spring 的 Environment 对象, 这样就不需要贴上在字段或者形参上太多的 @Value 注解。从 Environment 对象中可以获取到 application.properties 里面的参数,也可以获取到 @PropertySource 中的参数(但 application.properties 的优先级比 @PropertySource 高)

@Configuration
public class SpringConfigEnv {/*内置对象 继承了属性解析器*/@Autowiredprivate Environment environment;@Beanpublic MyDatasource myDatasource(){MyDatasource datasource=new MyDatasource();// 通过environment对象获取key对应的参数datasource.setDriverClassName(environment.getProperty("jdbc.driverClassName"));datasource.setUrl(environment.getProperty("jdbc.url"));datasource.setUsername(environment.getProperty("jdbc.username"));datasource.setPassword(environment.getProperty("jdbc.password"));return datasource;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Request请求参数----中文乱码问题

一: GET POST获取请求参数: 在处理为什么会出现中文乱码的情况之前, 首先我们要直到GET 以及 POST两种获取请求参数的不同 1>POST POST获取请求参数是通过输入流getReader来进行获取的, 通过字符输入流来获取响应的请求参数, 并且在解码的时候, 默认的情况是 ISO_885…

基于SpringBoot+Vue+Mybatis的408刷题小程序管理端

简介 原始数据&#xff1a;书目信息、章节信息、题目信息、系统菜单、系统角色、系统用户。 主要任务&#xff1a;系统主要采用spring boot作为后端框架&#xff0c;前端使用vueelementUI&#xff0c;为408刷题小程序提供一个方面的管理和维护的任务&#xff0c;主要功能包括…

图解Kafka架构学习笔记(三)

准备Kafka环境 这里推荐使用Docker Compose快速搭建一套本地开发环境。 以下docker-compose.yml文件用来搭建一套单节点zookeeper和单节点kafka环境&#xff0c;并且在8080端口提供kafka-ui管理界面。 version: 2.1services:zoo1:image: confluentinc/cp-zookeeper:7.3.2hos…

day6:STM32MP157——串口通信实验

使用的是cortex A7内核 【串口通信的工作原理】 本次实验使用的是uart4的串口&#xff0c;分别使用了uart4_tx和uart4_rx两个引脚。根据板子的原理图我们可以知道&#xff0c;他们分别对应着芯片的PG11和PB2 从引脚名字也可以知道使用了GPIO口&#xff0c;所以本次实验同样需…

ubuntu20.04安装 ffmpeg 开发环境

参考&#xff1a;参考1 一些相关软件包&#xff0c;已打包整理好&#xff0c;如下 源码包 1、安装步骤 创建安装目录 sudo mkdir -p /usr/local/ffmpeg/lib 解压源码 tar -jxf ffmpeg-4.3.2.tar.bz2 到指定ffmpeg目录进行配置 cd ffmpeg-4.3.2/ 配置&#xff1a;会报错很多…

Spark Streaming DStream

Spark Streaming DStream DStream 即Discretized Stream&#xff0c;中文叫做离散流&#xff0c;Spark Streaming提供的一种高级抽象&#xff0c;代表了一个持续不断的数据流。 DStream可以通过输入数据源来创建&#xff0c;比如Kafka、Flume&#xff0c;也可以通过对其他DS…

【JAVA】通过JAVA实现用户界面的登录

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-wyCvaz0EBNwHcwsi {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

2025汤家凤考研数学视频,基础网课百度网盘课程+PDF讲义资料

2025汤家凤大神及数学全程 docs.qq.com/doc/DTmtOa0Fzc0V3WElI 复制粘贴到浏览器&#xff0c;可以见所有的Ke 第一轮 夯实基础 1.阅读大纲考查要求&#xff0c;明确每章的学习目标&#xff1b; 2.按节学习数学理论基础知识&#xff0c;吃透书中例题&#xff1b; 3.学习每章…

数学建模综合评价模型与决策方法

评价方法主要分为两类&#xff0c;其主要区别在确定权重的方法上 一类是主观赋权法&#xff0c;多次采取综合资讯评分确定权重&#xff0c;如综合指数法&#xff0c;模糊综合评判法&#xff0c;层次评判法&#xff0c;功效系数法等 另一类是客观赋权法&#xff0c;根据各指标…

ubuntu上一款好用的串口工具screen

看名字&#xff0c;你猜他是什么&#xff1f; 安装 sudo apt install screen 然后将USB串口接到虚拟机&#xff0c;执行dmesg命令查看串口设备名&#xff1a; 测试&#xff1a; sudo screen /dev/ttyUSB0 115200确实很简单。

机器视觉学习(六)—— 图像的颜色识别

目录 一、色彩空间 1.1 RGB色彩空间 1.2 HSV色彩空间 1.3 灰度 1.4 CMYK色彩空间 1.5 Lab色彩空间 二、色彩空间转换 三、识别颜色 3.1 识别一种特定的颜色 3.2 识别多种颜色 一、色彩空间 计算机视觉中常用的色彩空间有RGB色彩空间、HSV色彩空间、CMYK色彩空间、La…

如何设计循环队列(两种方法)

文章目录 前言一、方法一:数组法二、方法二.链表法总结 前言 前面有提到过队列的知识&#xff0c;这次来说一下怎么设计一个循环队列 一.循环队列&#xff08;力扣&#xff09; . - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资…

Java Synchronized

Synchronized Synchronized 原理偏向锁轻量级锁重量级锁 Synchronized特征jdk1.8Synchronized优化了什么&#xff1f;Synchronized修饰范围Synchronized lock 区别 Synchronized 原理 在Java对象内存布局中&#xff0c;每个对象都有一个对象头&#xff0c;其中包含锁状态信息。…

【stable diffusion扩散模型】一篇文章讲透

目录 一、引言 二、Stable Diffusion的基本原理 1 扩散模型 2 Stable Diffusion模型架构 3 训练过程与算法细节 三、Stable Diffusion的应用领域 1 图像生成与艺术创作 2 图像补全与修复 3 其他领域 四、Stable Diffusion的优势与挑战 &#x1f449;优势 &#x1f…

SpringBoot3集成PostgreSQL

标签&#xff1a;PostgreSQL.Druid.Mybatis.Plus&#xff1b; 一、简介 PostgreSQL是一个功能强大的开源数据库系统&#xff0c;具有可靠性、稳定性、数据一致性等特点&#xff0c;且可以运行在所有主流操作系统上&#xff0c;包括Linux、Unix、Windows等。 通过官方文档可以…

抠门精出游记之吉隆坡篇

我在新加坡一直是个街溜子&#xff0c;每天就是到处溜达&#xff0c;当然&#xff0c;时髦的词叫做citywalk。anyway&#xff0c;叫啥不重要&#xff0c;新加坡走腻了&#xff0c;跟老婆申请&#xff0c;去吉隆坡溜达一下&#xff0c;为啥要来吉隆坡呢&#xff0c;说起来还是因…

day3-QT

1>使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函。将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;密码是…

【循环神经网络rnn】一篇文章讲透

目录 引言 二、RNN的基本原理 代码事例 三、RNN的优化方法 1 长短期记忆网络&#xff08;LSTM&#xff09; 2 门控循环单元&#xff08;GRU&#xff09; 四、更多优化方法 1 选择合适的RNN结构 2 使用并行化技术 3 优化超参数 4 使用梯度裁剪 5 使用混合精度训练 …

科技云报道:造完“大模型”,“具身智能”将引领AI下一个浪潮?

科技云报道原创。 资深机器人专家Eric Jang不久前曾预言&#xff1a;“ChatGPT 曾在一夜之间出现。我认为&#xff0c;有智慧的机器人技术也将如此。” 3月13日深夜&#xff0c;一段人形机器人的视频开始热传。 在视频中&#xff0c;Figure的人形机器人&#xff0c;可以完全…

研华工控机610L学习笔记2:visualstudio与第一个C#程序

今日继续学习工控机 C# 编程相关知识&#xff1a; 这篇结束后我将先进行一段时间的C#的学习研究&#xff0c;并写一些C#的笔记 后续再更新工控机编程设计相关 目录 1、安装visualstudio&#xff1a; 2、创建第一个C#程序&#xff1a; 3、寻找C#解决方案源文件&#xff1a; …