Java阶段二Day15
Java阶段二Day15
文章目录
- Java阶段二Day15
- 复习前日知识点
- 对象数据类型注入
- 数组类型注入
- 集合类型的注入
- p命名空间
- 引入外部属性文件
- 基于XML管理bean
- bean的作用域
- bean的生命周期
- 代码演示生命周期
- 后置处理器处理展示
- 基于XML的自动装配
- 基于注解管理bean
- 开启组件扫描
- 使用注解定义Bean
- 属性值注入
- `@Autowired`注入
- `@Resource`注入
- Spring全注解开发
- 面试题
- 描述一下bean的生命周期
复习前日知识点
对象数据类型注入
-
引用外部bean,利用ref属性完成
<bean> <property name = "xxx" ref = "外部bean的id"/> </bean> -
使用内部bean
<bean> <property name = "xxx"><bean></bean></property> </bean>
数组类型注入
使用<array>标签实现
-
数组中存放普通变量
<property name = "xxx"><array><value>yyy</value><value>zzz</value></array> </property> -
数组中存放对象
<property name = "xxx"><array><ref bean = "外部bean的id"/><ref bean = "外部bean的id"/></array> </property>
集合类型的注入
-
List集合:使用
<list>标签实现<property name = "xxx"><list><value>zzz</value><ref bean = "外部bean的id"/></list> </property> -
Map集合:使用
<map>标签实现<property name = "xxx"><map><entry><key><value>key1</value></key><value>yyy</value></entry><entry><key><value>key2</value></key><ref bean = "外部bean的id"/></entry><entry key="" value=""/></map> </property> -
引用集合类型bean
-
定义
util的名称空间xmlns:util="http://www.springframework.org/schema/util" -
定义相关的
util标签<util:list id="aaa"><value>yyy</value><value>zzz</value> </util:list><util:map id="bbb"><entry><key><value>key1</value></key><value>yyy</value></entry><entry><key><value>key2</value></key><ref bean = "外部bean的id"/></entry><entry key="" value=""/> </util:map> -
使用
ref属性引用<property name = "xxx" ref = "aaa"></property> <property name = "xxx" ref = "bbb"></property>
-
p命名空间
-
定义
p的名称空间xmlns:p="http://www.springframework.org/schema/p" -
使用
p的语法注入<bean id = "xxx" class = "xxx" p:naem = "zzz" p:courseList-ref = "外部id"></bean>
引入外部属性文件
-
定义
context的名称空间xmlns:context="http://www.springframework.org/schema/context" -
设置外部文件
xxx.properties的路径<!-- 引入外部属性文件 --> <context:property-placeholder location="classpath:xxx.properties"></context:property-placeholder> -
使用
S{变量名}获取数据并注入<property name="xxx" value="${外部文件中的变量名}"></property>
基于XML管理bean
bean的作用域
-
说明
bean的作用域,是指在交给spring创建bean对象时,可以指定是单实例还是多实例,通过bean标签中的scope属性来指定,默认是单实例。
-
单实例和多实例
-
单实例
单实例(Singleton)是指某个类只能创建唯一的一个实例对象,并且该类提供一个全局的访问点(静态方法)来让外界获取这个实例,常常用在那些只需要一个实例来处理所有任务的场景下,例如配置类或数据库连接池等。
-
多实例
多实例(Multiple Instance)则是指可以在同一个类的定义下,创建多个实例对象。每个对象都是相互独立的,有自己的状态和行为;常常用于需要同时处理多个任务的场景。
-
在Spring中可以通过配置bean标签的scope属性来之地那个bean的作用域范围,具体如下
| 取值 | 含义 | 创建对象时机 |
|---|---|---|
| singleton(默认) | 在IoC容器中,这个bean的对象为单实例 | IoC容器初始化时 |
| prototype | 这个bean在IoC容器中有多个实例 | 获取bean,即getBEan()时 |
bean的生命周期
-
实例化阶段(bean对象创建)
在这个阶段中,容器会创建一个Bean的实例,并为其分配空间。这个过程可以通过构造方法完成。
-
属性赋值阶段
在实例化完Bean之后,容器会把Bean中的属性值注入到Bean中,这个过程可以通过set方法完成。
-
初始化阶段(bean对象初始化)
在属性注入完成后,容器会对Bean进行一些初始化操作;
- 初始化之前:bean的后置处理器可以接收到bean,此处可以对bean做相关操作。
- 初始化之后:bean的后置处理器可以接收到bean,此处可以对bean做相关操作。
-
使用阶段
初始化完成后,Bean就可以被容器使用了
-
销毁阶段
容器在关闭时会对所有的Bean进行销毁操作,释放资源。
代码演示生命周期
User.java
package com.liner.spring.life;
/**1. 让spring创建bean对象,并继续属性注入2. 演示生命周期2.1 实例化:构造方法打印2.2 属性赋值:set方法打印2.3 初始化:定义初始化方法2.4 使用阶段:getBean() 之后打印测试2.5 销毁:手动关闭loC容器后,打印测试*/
public class User {private String username;public User(){System.out.println("1-bean对象实例化,调用无参构造方法");}//初始化方法public void initMethod(){System.out.println("3-bean对象初始化,调用指定的初始化方法");}//销毁方法public void destoryMethod(){System.out.println("5-销毁bean对象,调用指定的销毁方法");}@Overridepublic String toString() {return "User{" +"username='" + username + '\'' +'}';}public String getUsername() {return username;}public void setUsername(String username) {System.out.println("2-通过set方法给bean对象属性赋值");this.username = username;}
}
UserTest.java
package com.liner.spring.life;import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class UserTest {@Testpublic void test(){ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean-life.xml");User user = context.getBean("user", User.class);System.out.println("使用阶段----4-使用bean阶段");System.out.println("user = " + user);//销毁方法context.close();}
}
bean-life.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"><!-- init-method 初始化方法 destroy-method 销毁方法 --><bean id="user" class="com.liner.spring.life.User" init-method="initMethod" destroy-method="destoryMethod"><property name="username" value="张三"/></bean>
</beans>
演示结果如下
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XDtlr40a-1683426977559)(../../../AppData/Roaming/Typora/typora-user-images/image-20230506220934219.png)]](https://img-blog.csdnimg.cn/57f5f525fbbd4fa6bfbb9601387c93db.png)
后置处理器处理展示
实现BeanPostProcessor接口
MyBeanPost.java
package com.liner.spring.life;import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;public class MyBeanPost implements BeanPostProcessor {@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {System.out.println("3之前,初始化之前执行");return BeanPostProcessor.super.postProcessBeforeInitialization(bean, beanName);}@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {System.out.println("3之后,初始化之后执行");return BeanPostProcessor.super.postProcessAfterInitialization(bean, beanName);}
}
bean-life.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"><!-- init-method 初始化方法 destroy-method 销毁方法 --><bean id="user" class="com.liner.spring.life.User" init-method="initMethod" destroy-method="destoryMethod"><property name="username" value="张三"/></bean><!-- 将后置处理器操作交给 spring--><bean id="myBeanPost" class="com.liner.spring.life.MyBeanPost"/></beans>
演示结果如下
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gX00ImMK-1683426977561)(../../../AppData/Roaming/Typora/typora-user-images/image-20230507085459862.png)]](https://img-blog.csdnimg.cn/668248eab1cd4543bbc112c0275572b9.png)
基于XML的自动装配
自动装配:根据指定的策略,在IoC容器中匹配某一个bean,自动为指定的bean中的所依赖的类类型或者接口类型属性赋值
使用bean标签的autowire属性设置自动装配效果
-
byType:根据类型匹配IoC容器中的某个兼容类型的bean,为属性自动赋值- 如果在IoC中,没有任何一个兼容类型的bean能够为属性赋值,则该属性不装配,默认值为null
- 如果在IoC中,有多个兼容类型的bean能够为属性赋值,则抛出异常
NoUniqueBeanDefinitionException
-
byName: -
将自动装配的属性名,作为bean的id在IoC容器中匹配相对应的bean进行赋值
基于注解管理bean
从Java5开始,Java增加了对注解(Annotation)的支持,它是代码中的一种特殊标记,可以在编译、类加载和运行时被读取,执行相应的处理。开发人员可以通过注解在不改变原有代码和逻辑的情况下,在源代码中嵌入补充信息。
Spring从2.5版本开始提供了对注解技术的全面支持,我们可以使用注解来实现自动装配,简化Spring的xml配置。
Spring通过注解实现自动装配:
- 引入依赖
- 开启组件扫描
- 使用注解定义Bean
- 依赖注入
开启组件扫描
Spring默认不使用注解装配Bean,因此需要在Spring的xml配置中,通过context:component-scan元素开启Spring Beans的自动扫描功能。开启此功能后,Spring会自动从扫描指定的包(base-package属性设置)及其子包下的所有类,如果类上使用了@Component注解,就将该类装配到容器中。
<?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 https://www.springframework.org/schema/context/spring-context.xsd"><!-- 开启组件扫描 扫描路径当前路径包和其子包--><context:component-scan base-package="com.liner.spring"/></beans>
使用注解定义Bean
Spring提供了以下多个注解,这些注解可以直接标注在java类上,将它们定义成Spring Bean。
| 注解 | 说明 |
|---|---|
| @Component | 该注解用于描述Spring中的Bean,它是一个泛化的概念,仅仅标识容器中的一个组件(Bean),并且可以作用在任何层次,例如Service层、Dao层等,使用时只需将该注解标注在相应的类上即可。 |
| @Respository | 该注解用于**数据访问层(Dao层)**的类标识为Spring中的Bean,功能与@Component相同。 |
| @Service | 该注解通常作用在业务层(Service层),用于将业务层的类标识为Spring中的Bean,其功能与@Component相同。 |
| @Controller | 该注解通常作用在控制层(如SpringMVC的Controller),用于将控制层的类标识为Spring中的Bean,其功能与@Component相同。 |
注意:以上四种注解本质上都是创建Java bean对象,而且创建出来的对象没有区别,只是为了开发方便
属性值注入
@Autowired注入
单独使用@Autowired注解,默认根据类型装配(byType)
@Autowired注解有一个required属性,默认值是true,表示在注入的时候要求被注入的Bean必须存在,如果不存在则报错。如果required属性设置为false,表示注入的Bean存在或者不存在都没关系,存在就注入,不存在也不报错。
package com.liner.spring.autowired.controller;import com.liner.spring.autowired.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;@Controller
public class UserController {//方式一:属性注入@Autowiredprivate UserService userService;//方式二:set方法注入@Autowiredpublic void setUserService(UserService userService) {this.userService = userService;}//方式三:构造方法注入@Autowiredpublic UserController(UserService userService) {this.userService = userService;}//方式四:形参注入 --很少使用public UserController(@Autowired UserService userService) {this.userService = userService;}//方式五:只有一个构造函数,可无注解public UserController(UserService userService) {this.userService = userService;}public void con(){System.out.println("controller正在运行...");userService.serv();}}
注意:@Autowired注解根据byType定位,所以如果一个接口有多个实现类时,会报错
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1QqcV1Cu-1683426977562)(../../../AppData/Roaming/Typora/typora-user-images/image-20230507100118993.png)]](https://img-blog.csdnimg.cn/f94df442d1064f3a925d04b4995448b9.png)
可配合@Qualifier注解一起使用,指定具体的实现类
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-18HRkuZa-1683426977562)(../../../AppData/Roaming/Typora/typora-user-images/image-20230507100338377.png)]](https://img-blog.csdnimg.cn/5201bd98b9984ec3a861ccc00a98cf3a.png)
@Resource注入
@Resource注解也可以完成属性注入,它和@Autowired注解的区别如下:
@Resource注解是JDK扩展包中的,也就是说属于JDK的一部分。所以该解释是标准注解,更加具有通用性,而@Autowired注解是Spring框架自己的@Resource注解默认根据名称装配byName,未指定name时,使用属性名作为name,通过name找不到的话会自动启动通过类型byType装配。而@Autowired注解默认根据类型装配byType,如果想根据名称匹配,需要配合@Qualifier注解一起使用@Resource注解用在属性上、setter方法上@Autowired注解用在属性上、setter方法上、构造方法上、构造方法参数上
Spring全注解开发
全注解开发就是不再使用spring配置文件了,写一个配置类来代替配置文件,使用@Configuration注解标记为配置类
SpringConfig.java
package com.liner.spring.config;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;//声明此类为配置类
@Configuration
//开启组件扫描
@ComponentScan("com.liner.spring")
public class SpringConfig {
}
面试题
描述一下bean的生命周期
- 第一步实例化,spring调用构造方法对bean实例化,分配出空间资源
- 第二步属性值的注入,调用setter方法对属性值进行注入
- 第三步初始化,可以调用指定的初始化方法进行前置操作,比如数据校验
- 第四步使用阶段,正常使用
- 第五步销毁,当应用程序停止时,Bean对象会销毁释放计算机资源,同时调用指定的销毁方法
- 后置处理器在对象初始化之前可拿到当前对象做一些操作处理,在初始化之后也可以做一些处理
相关文章:
Java阶段二Day15
Java阶段二Day15 文章目录 Java阶段二Day15复习前日知识点对象数据类型注入数组类型注入集合类型的注入p命名空间引入外部属性文件 基于XML管理beanbean的作用域bean的生命周期代码演示生命周期后置处理器处理展示基于XML的自动装配 基于注解管理bean开启组件扫描使用注解定义B…...
从月薪3000到月薪20000,自动化测试应该这样学...
绝大多数测试工程师都是从功能测试做起的,工作忙忙碌碌,每天在各种业务需求学习和点点中度过,过了好多年发现自己还只是一个功能测试工程师。 随着移动互联网的发展,从业人员能力的整体进步,软件测试需要具备的能力要…...
Python魔法方法 单例模式
前言 本文介绍一下python中常用的魔法方法以及面向对象中非常重要的单例模式。 魔法方法 python中一切皆对象,因为python是面向对象的编程语言。python给类和对象提供了大量的内置方法,这些内置方法也称魔法方法。这些魔法方法总是在某种条件下自动触…...
计算机网络基础知识(三)—— 什么是OSI七层模型?
文章目录 00 | 🛸发展史🛸01 | 🛸OSI七层参考模型🛸02 | 🛸OSI七层参考模型的信息流向🛸 OSI七层模型是Open Systems Interconnection Reference Model的缩写,是由国际标准化组织(IS…...
Python(符号计算常微分方程)谐振子牛顿运动方程
牛顿运动方程 牛顿运动方程可以写成以下形式 F d p d t m d v d t m d 2 r d t 2 \mathbf{F}\frac{d \mathbf{p}}{d t}m \frac{d \mathbf{v}}{d t}m \frac{d^2 \mathbf{r}}{d t^2} Fdtdpmdtdvmdt2d2r 恒力问题 具有恒定力的问题意味着恒定的加速度。 典型的例子是…...
OpenCL编程指南-1.2OpenCL基本概念
OpenCL概念基础 面向异构平台的应用都必须完成以下步骤: 1)发现构成异构系统的组件。 2)探查这些组件的特征,使软件能够适应不同硬件单元的特定特性。 3)创建将在平台上运行的指令块(内核)。 4)…...
使用 ChatGPT 辅助学习——为自己找一个老师
我们每个人都有许多标签,例如高中生、成绩中等、文科,根据这些标签我和其他拥有相同标签的人分配了相同的教程、班级和老师,这可以带来效率上的提升,因为同一份教程、老师就可以服务几十上百人,而无须为每个人定制&…...
MySQL基础(二十一)用户与权限管理
1. 用户管理 1.1 登录MySQL服务器 启动MySQL服务后,可以通过mysql命令来登录MySQL服务器,命令如下: mysql –h hostname|hostIP –P port –u username –p DatabaseName –e "SQL语句"-h参数后面接主机名或者主机IP,…...
程序员的下一个风口
面对近一年的裁员潮,以及 GPT 出现带来的 AI 颠覆潮流,各种话题出现:「前端已死」、「后端已死」、「Copy/Paste 程序员将被 AI 取代」。程序员行业是否还有发展空间? 这一两年的就业机会是因为经济衰落周期内造成的,不…...
Android 自定义View 之 简易输入框
简易输入框 前言正文① 构造方法② XML样式③ 测量④ 绘制1. 绘制方框2. 绘制文字 ⑤ 输入1. 键盘布局2. 键盘接口3. 键盘弹窗4. 显示键盘5. 相关API 四、使用自定义View五、源码 前言 在日常工作开发中,我们时长会遇到各种各样的需求,不部分需求是可以通…...
SpringMVC的基础知识
创建SpringMVC项目 SpringMVC项目其实和SpingBoot项目差不多,就多引入了一个SpringWeb项目而已拉 可以看这篇博客,创建的就是一个SpringMVC项目--创建项目の博客 SpringMVC是啥 Spring是啥相信大家都了解 啥是MVC呢?MVC是Model View Controller的缩写 我们分开看这三个词Model…...
OpenPCDet系列 | 4.2 DataAugmentor点云数据增强模块解析
文章目录 DataAugmentor模块解析1. gt_sampling2. random_world_flip3. random_world_rotation4. random_world_scaling5. limit_period DataAugmentor模块解析 在pointpillars算法中,具体的数据增强方法配置是在yaml中的DATA_CONFIG.DATA_AUGMENTOR进行配置&#…...
精准测试之过程与实践 | 京东云技术团队
作者:京东工业 宛煜昕 一、怎样的技术 •百度百科: 精准测试是一套计算机测试辅助分析系统。 精准测试的核心组件包含的软件测试示波器、用例和代码的双向追溯、智能回归测试用例选取、覆盖率分析、缺陷定位、测试用例聚类分析、测试用例自动生成系统…...
类ChatGPT逐行代码解读(1/2):从零实现Transformer、ChatGLM-6B
前言 最近一直在做类ChatGPT项目的部署 微调,关注比较多的是两个:一个LLaMA,一个ChatGLM,会发现有不少模型是基于这两个模型去做微调的,说到微调,那具体怎么微调呢,因此又详细了解了一下微调代…...
车道线检测
前言 目前,车道线检测技术已经相当成熟,主要应用在自动驾驶、智能交通等领域。下面列举一些当下最流行的车道线检测方法: 基于图像处理的车道线检测方法。该方法是通过图像处理技术从摄像头传回的图像中提取车道线信息的一种方法,…...
云渲染靠谱吗,使用云渲染会不会被盗作品?
云渲染靠谱吗、安全吗?如果使用 云渲染会不会被盗作品......Renderbus瑞云渲染作为一个正经的云渲染平台,也时不时会收到这类疑问,首先,瑞云渲染是肯定靠谱的,各位可以放心使用。另外小编也将在本篇教你如何辨别云渲染平台是否安全…...
什么是FPGA?关于FPGA基础知识 一起来了解FPGA lattice 深力科 MachXO3系列 LCMXO3LF-9400C-5BG256C
什么是FPGA?关于FPGA基础知识 一起来了解FPGA lattice 深力科 MachXO3系列 LCMXO3LF-9400C-5BG256C FPGA基础知识:FPGA是英文Field-Programmable Gate Array的缩写,即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器…...
有什么好用的云渲染?
在CG制作流程中,离线渲染一直是必要且耗时的环节。你的场景越复杂,渲染出现问题的可能性就越大,尤其是当你独自工作,没有人给你建议的时候,灯光、模型、场景任何一个环节渲染时出现问题都可能让你焦头烂额,…...
什么是医学影像PACS系统?PACS系统功能有哪些?作用有哪些?对接哪些设备?业务流程是什么?
一、什么是医学影像PACS系统 PACS:为Picture Archive and CommunicationSystem的缩写,是图象归档和通讯系统。PACS系统应用在医院影像科室的系统,主要的任务就是把日常产生的各种医学影像(包括核磁,CT,超声…...
分布式缓存:什么是它以及为什么需要它?
前言 随着网络的快速发展,分布式应用变得越来越普遍。这种类型的应用程序需要访问多个组件和服务,而这些组件可能分散在不同的物理位置上。在这种情况下,由于网络通信的高延迟和低带宽,性能问题变得尤为明显。为解决这一问题&…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...
AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)
Name:3ddown Serial:FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名:Axure 序列号:8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...
【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录
#工作记录 构建过程记录 Microsoft Windows [Version 10.0.27871.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗ ██╗███╗ ██╗ █████╗ ██╔════╝…...
