【鸿蒙开发】第三十六章 状态管理 - V1V2混用和迁移指导

目录​​​​​​​

1 自定义组件混用场景指导

1.1 概述

1.2 状态管理装饰器总览

状态管理V1的装饰器

状态管理V2的装饰器

状态管理装饰器支持的数据类型总览

1.3 限制条件

1.3.1 V1和V2的装饰器不允许混用

1.V1的自定义组件中不可以使用V2的装饰器

2.V2的自定义组件中不可以使用V1的装饰器

3. 多个装饰器不允许装饰同一个变量(@Watch、@Once、@Require除外)

2 混用场景介绍

2.1 V1和V2类相关装饰器混用

1. V1的自定义组件中使用被@ObservedV2装饰的类对象

2. V2的自定义组件中使用被@Observed装饰的类对象

2.2 不存在变量传递时,V1和V2的自定义组件混用

1. V1中使用V2的自定义组件

2. V2中使用V1的自定义组件

2.3 存在变量传递时,V1和V2的自定义组件数据混用

1. V1->V2:V1的普通变量传递给V2的自定义组件

2. V1->V2:V1的状态变量传递给V2的自定义组件

3. V2->V1:V2的普通变量传递给V1的自定义组件

4. V2->V1:V2的状态变量传递给V1的自定义组件

2.4 混用场景总结

3 V1->V2迁移指导

3.1 概述

3.2 V1V2使用指引

3.3 迁移指南的目的

3.4 V1V2能力对比及迁移简表

3.5 各装饰器迁移示例

@State->@Local

@Prop -> @Param

@ObjectLink/@Observed/@Track -> @ObservedV2/@Trace

@Provide/@Consume -> @Provider/@Consumer

@Watch -> @Monitor

@Computed

LocalStorage->全局@ObservedV2/@Trace

AppStorage->AppStorageV2

Environment->调用Ability接口直接获取系统环境变量

PersistentStorage->PersistenceV2


1 自定义组件混用场景指导

1.1 概述

状态管理V1与V2的混用规则可以概括为:

  • V1的自定义组件中不可以使用V2的装饰器,否则编译报错。

  • 组件间不存在变量传递时,V1的自定义组件中可以使用V2的自定义组件,包括import第三方@ComponentV2装饰的自定义组件。

  • 组件间存在变量传递时,V1的变量传递给V2的自定义组件,有如下限制:

    • V1中未被装饰器装饰的变量(后称普通变量):V2只能使用@Param接收。
    • V1中被装饰器装饰的变量(后称状态变量):V2存在只能通过@Param装饰器接收,且仅限于boolean、number、enum、string、undefined、null这些简单类型数据。
  • V2的自定义组件中不可以使用V1的装饰器,否则编译报错。

  • 组件间不存在变量传递时,V2自定义组件可以使用V1的自定义组件,包括import第三方@Component装饰的自定义组件。

  • 组件间存在变量传递时,V2的变量传递给V1的自定义组件,有如下限制:

    • V2中未被装饰器装饰的变量(后称普通变量):若V1使用装饰器装饰接收的数据,只能通过@State、@Prop、@Provide。
    • V2中被装饰器装饰的变量(后称状态变量):若V1使用装饰器装饰接收的数据,不支持内置类型数据:Array、Set、Map、Date。

1.2 状态管理装饰器总览

状态管理V1的装饰器

装饰器类别装饰器
组件内装饰器@State、@Prop、@Link、@ObjectLink、@Provide、@Consume、@StorageProp、@StorageLink、@LocalStorageProp、@LocalStorageLink、@Watch
类相关装饰器@Observed、@Track

状态管理V2的装饰器

装饰器类别装饰器
组件内装饰器@Local、@Param、@Provider、@Consumer、@Once、@Event、@Monitor、@Computed
类相关装饰器@ObservedV2、@Trace、@Type

状态管理装饰器支持的数据类型总览

状态管理能够支持的数据类型有:

数据类型关键字
简单类型数据boolean、number、enum、string、null、undefined
function类型function(仅V2的@Event、@Monitor、@Computed支持)
Object类型Object
Class类型Class
内置类型Array、Map、Set、Date

1.3 限制条件

1.3.1 V1和V2的装饰器不允许混用

1.V1的自定义组件中不可以使用V2的装饰器

V2的组件内装饰器不允许在V1的自定义组件中使用,编译会报错。

@Local、@Param、@Event,@Provider、@Consumer、@Monitor、@Computed和示例代码中的装饰器表现一致。

2.V2的自定义组件中不可以使用V1的装饰器

V1的组件内装饰器不允许在V2的自定义组件中使用,编译会报错。

@ObjectLink、@Provide、@Consume、@StorageProp、@StorageLink、@LocalStorageProp、@LocalStorageLink和示例的装饰器表现一致。

3. 多个装饰器不允许装饰同一个变量(@Watch、@Once、@Require除外)

除了@Watch、@Once、@Require这些能力扩展装饰器可以配合其他装饰器使用外,其他装饰器不允许装饰同一个变量。

2 混用场景介绍

2.1 V1和V2类相关装饰器混用

1. V1的自定义组件中使用被@ObservedV2装饰的类对象

@ObservedV2的使用需要遵循如下规则:

  • @ObservedV2只能装饰Class,@Trace、@Type只能装饰类属性,且只能在@ObservedV2中使用。
  • @Track不可以在@ObservedV2中使用。
  • 对于被@ObservedV2装饰的Class,不可以直接被V1的装饰器装饰,否则编译时报错。
  • 示例中,开发者去掉报错的装饰器即可正常运行,被@Trace装饰的类属性变化时可以观察到变化,否则不可以观测到变化。
2. V2的自定义组件中使用被@Observed装饰的类对象

不建议开发者在V2中使用@Observed装饰的Class,因为@Observed和@Track仅能对类属性做区分,无观测能力,使用@Observed和@ObjectLink拆分嵌套数据才能够观测深层次数据,但@ObjectLink无法在V2的自定义组件中使用。

开发者在对V1的代码向V2迁移时,@Observed装饰的Class不建议在@ComponentV2中使用,无观测能力,如果一定要使用,则遵循以下规则:

  • @Observed只能装饰Class,且@Trace不可以在@Observed中使用。
  • @Observed和@Track无任何观测能力,只能用于防止Class中一个类属性改变而导致整个Class的刷新。
  • 继承自@Observed的Class被V2装饰器装饰,V2的组件内装饰器无类属性观测能力,所以使用@Observed会无法观测到类属性变化。
  • 示例中,开发者去掉报错的装饰器即可正常运行,由于无观测能力,所以不建议V2中使用@Observed。

2.2 不存在变量传递时,V1和V2的自定义组件混用

1. V1中使用V2的自定义组件

V1中使用V2的自定义组件,当不存在变量传递时无影响,若涉及变量传递,请见下一节V1和V2的数据混用。

2. V2中使用V1的自定义组件

2中使用V1的自定义组件,当不存在变量传递时无影响,若涉及变量传递,请见下一节V1和V2的数据混用。

2.3 存在变量传递时,V1和V2的自定义组件数据混用

1. V1->V2:V1的普通变量传递给V2的自定义组件

当V1的普通变量传递给V2的自定义组件时,有如下限制:

  • V2的自定义组件必须通过@Param接收数据。
  • 接收数据的观测能力为@Param能力,对于接收的Class,需要通过@ObservedV2和@Trace才能观察变化。
2. V1->V2:V1的状态变量传递给V2的自定义组件

当V1的状态变量给V2的自定义组件时,有如下规则:

  • 仅支持简单类型变量,其余类型数据会在编译时报错。

  • 示例中使用了@State装饰器,@Prop、@Link、@ObjectLink、@Provide、@Consume、@StorageProp、@StorageLink、@LocalStorageProp、@LocalStorageLink行为和@State保持一致。

3. V2->V1:V2的普通变量传递给V1的自定义组件

当V2的普通变量传递给V1自定义组件时:

  • V1可以不使用装饰器接收数据,接收过来的变量在V1组定义组件内也会是普通变量。

  • V1若使用装饰器接收数据,仅可通过@State、@Prop、@Provide接收。

4. V2->V1:V2的状态变量传递给V1的自定义组件

V2的状态变量传递给V1的自定义组件,存在如下限制:

  • V1可以不使用装饰器接收数据,接收过来的变量在V1组定义组件内也会是普通变量。

  • V1若使用装饰器接收数据,仅可通过@State、@Prop、@Provide接收。

  • V1若使用装饰器接收数据,不支持内置类型的数据。

2.4 混用场景总结

通过对V1和V2的混用场景详细梳理,可以看到,当V2的代码混用V1的代码时,即V1的组件或者类数据向V2进行传递,大部分V1的能力在V2都是被禁止的。而V1的代码去混用V2代码时,即V2的组件或者类数据向V1传递,做了部分功能开放,例如@ObservedV2和@Trace,这也是对V1嵌套类数据的观测能提供的最大的帮助。所以在代码开发时,不鼓励开发者使用V1和V2进行混用开发,但是对于代码迁移上,可以让V1的开发者逐步将代码向V2进行迁移,从而稳步替换V1的功能代码,并且十分不鼓励开发者在V2的代码架构上混用V1的代码。

3 V1->V2迁移指导

3.1 概述

ArkUI状态管理的主要职责是:负责将可观察数据的变化自动同步到UI界面,实现数据驱动的UI刷新,使开发者能更加够专注于UI界面的实现和设计。

在状态管理框架的演进过程中,先后推出了状态管理V1和V2两个版本。V1强调组件层级的状态管理,而V2则增强了对数据对象的深度观察与管理能力,不再局限于组件层级。通过V2,开发者能够更灵活地控制数据和状态,实现更高效的UI刷新。具体V1和V2的区别可以参见状态管理概述。

3.2 V1V2使用指引

  1. V2是V1的增强版本,为开发者提供更多功能和灵活性。
  2. 对于新开发的应用,建议直接使用V2版本范式来进行开发。
  3. 对于已经使用V1的应用,如果V1的功能和性能已能满足需求,则不必立即切换到V2。如果开发者在开发过程中受限于V1不能深度观察等特性,则建议开发者尽早规划向V2的迁移,以便未来实现平滑过渡和改进。
  4. 对于需要在现阶段混用V1和V2的场景,请参阅混用文档。编译器、工具链、IDE对某些不推荐的误用和混用场景会进行校验,虽然开发者可能可以通过特殊手段绕过这些校验,但还是强烈建议开发者遵循混用文档的指导,避免因双重代理等问题给应用带来不确定性。

3.3 迁移指南的目的

  1. 对希望将现有V1应用迁移到V2的开发者,提供系统化的模板和指导,帮助完成V1到V2的迁移。
  2. 对希望逐步将V1应用过渡到V2的开发者,提供参考,结合本迁移文档与混用文档,可以帮助开发者实现逐步改造。
  3. 尚未开始开发应用但已熟悉V1状态管理规则的开发者,可以参考本迁移文档及V2各个装饰器和接口的文档,开始使用V2进行应用开发。

3.4 V1V2能力对比及迁移简表

V1装饰器名V2装饰器名说明
@Observed@ObservedV2

表明当前对象为可观察对象。但两者能力并不相同。

@Observed可观察第一层的属性,需要搭配@ObjectLink使用才能生效。

@ObservedV2本身无观察能力,仅代表当前class可被观察,如果要观察其属性,需要搭配@Trace使用。

@Track@Trace

V1装饰器@Track为精确观察,不使用则无法做到类属性的精准观察。

V2@Trace装饰的属性可以被精确跟踪观察。

@Component@ComponentV2

@Component为搭配V1状态变量使用的自定义组件装饰器。

@ComponentV2为搭配V2状态变量使用的自定义组件装饰器。

@State

无外部初始化:@Local

外部初始化一次:@Param@Once

@State和@Local类似都是数据源的概念,在不需要外部传入初始化时,可直接迁移。如果需要外部传入初始化,则可以迁移为@Param@Once,详情见@State->@Local。
@Prop@Param@Prop和@Param类似都是自定义组件参数的概念。当输入参数为复杂类型时,@Prop为深拷贝,@Param为引用。
@Link@Param@Event@Link是框架自己封装实现的双向同步,对于V2开发者可以通过@Param@Event自己实现双向同步。
@ObjectLink@Param直接兼容,@ObjectLink需要被@Observed装饰的class的实例初始化,@Param没有此限制。
@Provide@Provider兼容。
@Consume@Consumer兼容。
@Watch@Monitor

@Watch用于监听V1状态变量的变化,具有监听状态变量本身和其第一层属性变化的能力。状态变量可观察到的变化会触发其@Watch监听事件。

@Monitor用于监听V2状态变量的变化,搭配@Trace使用,可有深层监听的能力。状态变量在一次事件中多次变化时,仅会以最终的结果判断是否触发@Monitor监听事件。

LocalStorage全局@ObservedV2@Trace兼容。
AppStorageAppStorageV2兼容。
Environment调用Ability接口获取系统环境变量Environment获取环境变量能力和AppStorage耦合。在V2中可直接调用Ability接口获取系统环境变量。
PersistentStoragePersistenceV2PersistentStorage持久化能力和AppStorage耦合,PersistenceV2持久化能力可独立使用。

3.5 各装饰器迁移示例

@State->@Local

迁移规则

在V1中,@State装饰器用于装饰组件内部的状态变量,在V2中提供了@Local作为其替代能力,但两者在观察能力和初始化规则上存在明显差异。针对不同的使用场景,迁移策略如下:

  • 简单类型:对于简单类型的变量,可以直接将@State替换为@Local。
  • 复杂类型:V1中的@State可以观察复杂对象的第一层属性变化,而V2中的@Local只能观察对象自身的变化。如果需要追踪对象内部的属性变化,可以结合使用@ObservedV2和@Trace。
  • 外部初始化:V1中,@State支持从外部传递初始值,但在V2中,@Local禁止外部初始化。若需要从外部传递初始值,可以使用@Param和@Once装饰器来实现类似的效果。

迁移规则

在V1中,@Link允许父组件和子组件之间进行双向数据绑定。迁移到V2时,可以用@Param和@Event模拟双向同步。@Param实现父到子的单向传递,子组件再通过@Event回调函数触发父组件的状态更新。

@Prop -> @Param

迁移规则

在V1中,@Prop装饰器用于从父组件传递参数给子组件,这些参数在子组件中可以被直接修改。在V2中,@Param取代了@Prop的作用,但@Param是只读的,子组件不能直接修改参数的值。因此,根据场景的不同,有几种迁移策略:

  • 简单类型:对于简单类型的参数,可以直接将@Prop替换@Param。
  • 复杂类型:如果传递的是复杂对象且需要严格的单向数据绑定,可以对对象进行深拷贝,防止子组件修改父组件的数据。
  • 子组件修改变量:如果子组件需要修改传入的参数,可以使用@Once来允许子组件对在本地修改该变量。但需要注意,如果使用了@Once,则代表当前子组件只会被初始化一次,后续并没有父组件到子组件的同步能力。

复杂类型的单向数据传递

在V2中,传递复杂类型时,如果希望实现严格的单向数据绑定,防止子组件修改父组件的数据,需要在使用@Param传递复杂对象时进行深拷贝以避免传递对象的引用。

子组件修改变量

在V1中,子组件可以修改@Prop的变量,然而在V2中,@Param是只读的。如果子组件需要修改传入的值,可以使用@Param和@Once允许子组件在本地修改。

@ObjectLink/@Observed/@Track -> @ObservedV2/@Trace

迁移规则

在V1中,@Observed与@ObjectLink装饰器用于观察类对象及其嵌套属性的变化,但V1只能直接观察对象的第一层属性。对于嵌套对象的属性,必须通过自定义组件和@ObjectLink实现观察。此外,V1中提供了@Track装饰器来实现对属性级别变化的精确控制。

在V2中,@ObservedV2与@Trace结合使用,可以高效地实现类对象及其嵌套属性的深度观察,省去了对自定义组件的依赖,简化了开发流程。同时,@Trace装饰器还具备精确更新的能力,替代了V1中的@Track,从而实现更高效的UI刷新控制。根据不同的场景,有以下迁移策略:

  • 嵌套对象的属性观察:V1中需要通过自定义组件和@ObjectLink观察嵌套属性,V2中则可以使用@ObservedV2和@Trace直接观察嵌套对象,简化了代码结构。
  • 类属性的精确更新:V1中的@Track可以用V2中的@Trace取代,@Trace可以同时观察和精确更新属性变化,使代码更简洁高效。

嵌套对象属性观察方法

在V1中,无法直接观察嵌套对象的属性变化,只能观察到第一层属性的变化。必须通过创建自定义组件并使用@ObjectLink来实现对嵌套属性的观察。V2中使用@ObservedV2和@Trace,可以直接对嵌套对象的属性进行深度观察,减少复杂度。

类属性变化观测

在V1中,@Observed用于观察类实例及其属性的变化,@Track则用于对属性级别的变化优化,使得只有被@Track装饰的属性触发UI更新。在V2中,@Trace结合了观察和更新属性级别变化的能力,搭配@ObservedV2实现高效的UI更新。

@Provide/@Consume -> @Provider/@Consumer

迁移规则

V1的@Provide/@Consume和V2@Provider/@Consumer定位和作用大体类似,基本可以实现丝滑替换,但是有以下细微差距,开发者可根据自己代码实现来参考是否需要调整:

在V1中,@Provide和@Consume用于父子组件之间的数据共享,可以通过alias(别名)或属性名匹配,同时@Consume必须依赖父组件的@Provide,不允许本地初始化。而V2中,@Provider和@Consumer增强了这些特性,使数据共享更加灵活。根据不同的场景,有以下迁移策略:

  • V1中@Provide/@Consume在没有指定alias的情况下,可以直接使用。V2中@Provider/@Consumer是标准装饰器,且参数可选,所以不管有无指定alias后面需要必须跟随“()”。
  • alias和属性名匹配规则:V1中,@Provide和@Consume可以通过alias或属性名匹配;V2中,alias是唯一的匹配key,指定alias后只能通过alias匹配。
  • 本地初始化支持:V1中,@Consume不允许本地初始化,必须依赖父组件;V2中,@Consumer支持本地初始化,当找不到对应的@Provider时使用本地默认值。
  • 从父组件初始化:V1中,@Provide可以直接从父组件初始化;V2中,@Provider不支持外部初始化,需用@Param和@Once接受初始值并赋给 @Provider。
  • 重载支持:V1中,@Provide默认不支持重载,需设置 allowOverride;V2中,@Provider默认支持重载,@Consumer会向上查找最近的@Provider。

@Watch -> @Monitor

迁移规则

在V1中,@Watch用于监听状态变量的变化,并在变量变化时触发指定回调函数。在V2中,@Monitor替代了@Watch,可以更灵活地监听变量的变化,并获取变量变化前后的值。具体的迁移策略如下:

  • 单变量监听:对于简单的场景,可以直接用@Monitor替换@Watch,效果一致。
  • 多变量监听:V1的@Watch无法获取变化前的值。在V2中,@Monitor支持同时监听多个变量,并可以访问变量变化前后的状态。

@Computed

迁移规则

V1中并没有提供计算属性的概念,所以对于UI中的冗余计算,并没有办法可以减少重复计算。V2针对该场景,提供了@Computed装饰器,可以帮助开发者减少重复计算。

LocalStorage->全局@ObservedV2/@Trace

迁移规则

LocalStorage的目的是为了实现页面间的状态变量共享。之所以提供这个能力,是因为V1状态变量和View层耦合,无法由开发者自主地实现页面间状态变量的共享。

对于状态管理V2,状态变量的观察能力内嵌到数据本身,不再和View层耦合,所以对于状态管理V2,不再需要类似LocalStorage的能力,可以使用全局@ObservedV2/@Trace,由开发者自己import和export,自己实现状态变量的页面间共享。

AppStorage->AppStorageV2

上一小节中,对于全局的@ObserveV2/@Trace的改造并不适合跨Ability的数据共享,该场景可以使用AppStorageV2来替换。

Environment->调用Ability接口直接获取系统环境变量

V1中,开发者可以通过Environment来获取环境变量,但Environment获取的结果无法直接使用,需要配合AppStorage才能得到对应环境变量的值。

PersistentStorage->PersistenceV2

V1中PersistentStorage提供了持久化UI数据的能力,而V2则提供了更加方便使用的PersistenceV2接口来替代它。

  • PersistentStorage持久化的触发时机依赖AppStorage的观察能力,且与AppStorage耦合,开发者无法自主选择写入或读取持久化数据的时机。
  • PersistentStorage使用序列化和反序列化,并没有传入类型,所以在持久化后,会丢失其类型,且对象的属性方法不能持久化。

对于PersistenceV2:

  • 与PersistenceV2关联的@ObservedV2对象,其@Trace属性的变化,会触发整个关联对象的自动持久化。
  • 开发者也可以调用PersistenceV2.save和PersistenceV2.connect接口来手动触发持久化写入和读取。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【openresty服务器】:源码编译openresty支持ssl,增加service系统服务,开机启动,自己本地签名证书,配置https访问

1,openresty 源码安装,带ssl模块 https://openresty.org/cn/download.html (1)PCRE库 PCRE库支持正则表达式。如果我们在配置文件nginx.conf中使用了正则表达式,那么在编译Nginx时就必须把PCRE库编译进Nginx&#xf…

迅为RK3568开发板篇Openharmony配置HDF控制UART-什么是串口

串口(Serial Port)也叫串行通信接口,通常也叫做 COM 接口,是通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输。 两个 UART 设备的连接示意图如下,UART 与其他模块一般用 2 线…

Anaconda +Jupyter Notebook安装(2025最新版)

Anaconda安装(2025最新版) Anaconda简介安装1:下载anaconda安装包2: 安装anaconda3:配置环境变量4:检查是否安装成功5:更改镜像源6:更新包7:检查 Jupyter Notebook一.Jup…

HtmlRAG:RAG系统中,HTML比纯文本效果更好

HtmlRAG 方法通过使用 HTML 而不是纯文本来增强 RAG 系统中的知识表示能力。通过 HTML 清洗和两步块树修剪方法,在保持关键信息的同时缩短了 HTML 文档的长度。这种方法优于现有基于纯文本的RAG的性能。 方法 其实主要看下围绕html提纯思路,将提纯后的…

Linux 文件系统:恢复已删除文件的挑战

如今,Linux 操作系统越来越受欢迎。它的明显优势首先是免费。此外,该操作系统提供了种类繁多的版本及其衍生产品,可满足从手机到超级计算机等设备的不同用户需求。 Linux 操作系统使用独有的文件系统,包括 Ext2、Ext3 和 Ext4、X…

三角拓扑聚合优化器TTAO-Transformer-BiLSTM多变量回归预测(Maltab)

三角拓扑聚合优化器TTAO-Transformer-BiLSTM多变量回归预测(Maltab) 完整代码私信回复三角拓扑聚合优化器TTAO-Transformer-BiLSTM多变量回归预测(Maltab) 一、引言 1、研究背景和意义 在现代数据科学领域,时间序列…

提供可传递的易受攻击的依赖项

问题如图所示: 原因:okhttp3.version 3.14.9 版本存在部分漏洞,在 maven 仓库是可以看到的 maven 地址: maven 下图中 Vulnerabilities 即为漏洞 处理:换一个无漏洞的版本即可

使用pocketpal-ai在手机上搭建本地AI聊天环境

1、下载安装pocketpal-ai 安装github的release APK 2、安装大模型 搜索并下载模型,没找到deepseek官方的,因为海外的开发者上传了一堆乱七八糟的deepseek qwen模型,导致根本找不到官方上传的……deepseek一开源他们觉得自己又行了。 点击之…

头歌实验--面向对象程序设计

目录 实验五 类的继承与派生 第1关:简易商品系统 任务描述 答案代码 第2关:公司支出计算 任务描述 答案代码 第3关:棱柱体问题 任务描述 答案代码 实验五 类的继承与派生 第1关:简易商品系统 任务描述 答案代码 #incl…

卷积神经网络实战人脸检测与识别

文章目录 前言一、人脸识别一般过程二、人脸检测主流算法1. MTCNN2. RetinaFace3. CenterFace4. BlazeFace5. YOLO6. SSD7. CascadeCNN 三、人脸识别主流算法1.deepface2.FaceNet3.ArcFace4.VGGFace5.DeepID 四、人脸识别系统实现0.安装教程与资源说明1. 界面采用PyQt5框架2.人…

Spring IoC的实现机制是什么?

大家好,我是锋哥。今天分享关于【Spring IoC的实现机制是什么?】面试题。希望对大家有帮助; Spring IoC的实现机制是什么? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring IoC(Inversion of Control…

关闭浏览器安全dns解决访问速度慢的问题

谷歌浏览器加载速度突然变慢了?检查安全DNS功能(DoH)是否被默认开启。 谷歌浏览器在去年已经推出安全DNS功能(即DoH) , 启用此功能后可以通过加密的DNS增强网络连接安全性。例如查询请求被加密后网络运营商将无法嗅探用户访问的地址,因此对于增强用户的…

【Spring AI】基于SpringAI+Vue3+ElementPlus的QA系统实现(前端)

整理不易,请不要吝啬你的赞和收藏。 1. 前言 这篇文章是 Spring AI Q&A 系统的前端实现。这篇文章将介绍如何快速搭建一个基于 vue3 ElementPlus 的前端项目,vue3 项目的目录结构介绍,如何在前端实现流式响应,如何高亮显示…

中望CAD c#二次开发 ——VS环境配置

新建类库项目&#xff1a;下一步 下一步 下一步&#xff1a; 或直接&#xff1a; 改为&#xff1a; <Project Sdk"Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>NET48</TargetFramework> <LangVersion>pr…

Java—File

Flie对象就表示一个路径&#xff0c;可以是文件的路径、也可以是文件夹的路径这个路径可以是存在的&#xff0c;也允许是不存在的 file类常用的构造方法&#xff1a; 代码案列&#xff1a; 小结&#xff1a; file的常见成员方法 判断获取相关方法&#xff1a; 代码案例&#…

HTML的入门

一、HTML HTML&#xff08;HyperText Markup Language&#xff0c;超文本标记语言&#xff09;是一种用来告知浏览器如何组织页面的标记语言。 超文本&#xff1a;就是超越了文本&#xff1b;HTML不仅仅可以用来显示文本(字符串、数字之类)&#xff0c;还可以显示视频、音频等…

辛格迪客户案例 | 钥准医药科技GMP文件管理(DMS)项目

01 创新药企&#xff0c;崛起于启东 在我国医药行业蓬勃发展的浪潮中&#xff0c;钥准医药科技&#xff08;启东&#xff09;有限公司&#xff08;以下简称“钥准医药”&#xff09;犹如一颗冉冉升起的新星&#xff0c;闪耀着创新与活力的光芒。成立于2015年&#xff0c;钥准医…

DeepSeek本地化部署【window下安装】【linux下安装】

一、window 本地安装指导 1.1、下载window安装包 https://ollama.com/download/OllamaSetup.exe 1.2、点击下载好的安装包进行安装 检测安装是否成功&#xff1a; C:\Users\admin>ollama -v ollama version is 0.5.7有上面的输出&#xff0c;则证明已经安装成功。 配置…

【第1章:深度学习概览——1.4 深度学习的核心组件与概念解析之激活函数的作用与类型】

嘿,各位技术小伙伴们,今天咱们来聊聊深度学习中的一个超级重要的概念——激活函数。这可是深度学习模型中的“调味剂”,让模型变得更加灵活和强大。准备好了吗?咱们这就开讲! 一、激活函数是什么? 激活函数,简单来说,就是神经网络中的一层“魔法调料”。它给神经网络…

智慧升级,赋能未来——开启安全高效与绿色低碳新篇章

在数字化转型与“双碳”目标的驱动下&#xff0c;古河云科技携手全球领先的AI企业DeepSeek&#xff0c;以“AI数字孪生”为核心&#xff0c;推出全新一代智能运维与能碳管理解决方案&#xff0c;助力企业实现安全管控、设备效能优化、绿色节能与高效管理四大维度的全面升级&…