Skip to content

feat(bean): 支持FastBeanCopier复制record#358

Merged
zhou-hao merged 2 commits into
5.0.xfrom
5.0.x-record
Jul 14, 2026
Merged

feat(bean): 支持FastBeanCopier复制record#358
zhou-hao merged 2 commits into
5.0.xfrom
5.0.x-record

Conversation

@zhou-hao

@zhou-hao zhou-hao commented Jul 14, 2026

Copy link
Copy Markdown
Member

目的

  • 5.0.x 基准分支补齐 FastBeanCopier 对 Java record 的复制支持。
  • 解决 record 无无参构造和 setter 时,FastBeanCopier.copy(source, TargetRecord.class) 无法构造目标对象的问题。
  • 将 record 目标复制从普通 bean 原地写入契约中拆出,避免每次 copy 走 Constructor#newInstance 反射构造。

核心变动

  • hsweb-core
    • 新增 RecordCopier,单独承载 record canonical constructor 复制契约,返回新 record 实例。
    • 基于现有 Proxy 机制生成 RecordCopier 实现,并通过 RECORD_CACHE 按 source/target 类型缓存。
    • 生成代码直接读取 Map / bean / record 源属性,按 record component 顺序调用 canonical constructor。
    • 支持 Map -> recordbean -> recordrecord -> recordrecord -> beanrecord -> Map
    • 支持 nested record、List<Record> 泛型集合、primitive 默认值、非 primitive ignore 默认 null、直接可赋值组件复用。
    • 当已有 record 实例作为 target 时,由于 record 不可变,会重新构造并返回新实例。
  • 测试:
    • 扩展 FastBeanCopierTest#testRecordCopy,覆盖 Map/bean/record 与 nested record、集合泛型、ignore、缺省值等复制路径。

设计与测试目标

  • 设计稿:不适用;本次为 hsweb-core 基础工具能力增强,范围集中在 FastBeanCopier。
  • 用户确认:已确认需要基于 5.0.x 单独支持 record,并优先采用非每次 copy 反射构造方案。
  • 测试目标:覆盖 record 正常复制、嵌套 record、泛型集合转换、ignore 字段、缺省值、既有 FastBeanCopier 回归路径。
  • 注释 / 公共契约:已为 RecordCopier 补充接口与方法契约说明;FastBeanCopier 中保留 record 不可变重建说明。
  • 数据权限:不适用;不涉及 CRUD / AssetsHolder。
  • 数据库兼容与性能:不适用;不涉及 SQL。
  • 链路追踪:不适用;本次为通用 bean copy 工具,不涉及关键业务链路。
  • MBean 运维可观测性:不适用;未新增常驻任务、队列或后台执行器。

测试结果

  • 命令:mvn -pl hsweb-core -Dtest=FastBeanCopierTest#testRecordCopy test
    • 单元测试:1 passed, 0 failed, 0 skipped
  • 命令:mvn -pl hsweb-core -Dtest=FastBeanCopierTest test
    • 单元测试:14 passed, 0 failed, 0 skipped
  • 命令:mvn -pl hsweb-core test
    • 单元测试:62 passed, 0 failed, 0 skipped
  • 新增/更新测试:FastBeanCopierTest#testRecordCopy 覆盖 Map/bean/record 与 nested record、集合泛型、ignore、缺省值复制路径。
  • 集成测试:不适用;未涉及数据库、消息、事件、协议、跨模块边界、外部依赖或启动装配。
  • 压力测试:不适用;record 支持为构造路径补齐,本次未新增性能压测要求。
  • 覆盖率(执行 mvn -pl hsweb-core test 后 JaCoCo):
    • hsweb-core overall line 52.04%, branch 49.52%
    • FastBeanCopier line 87.96%, branch 76.15%

文档同步情况

  • 已同步:无长期文档需要同步。
  • 未同步:README 未修改;FastBeanCopier 对外用法无长期总览变更。
  • 说明:测试证据放在 PR / CI,未新增独立任务流水文档。

风险与说明

  • 影响范围:hsweb-core 的 FastBeanCopier 复制和转换路径。
  • 注释 / 公共契约:已补 RecordCopier 契约说明;未破坏既有 Copier 原地写入契约。
  • 链路追踪 / 可观测性:不涉及;本次为基础工具能力增强。
  • MBean / 运维可观测性:不涉及;未新增常驻运维对象。
  • 未覆盖场景:未单独做性能压测;本次用生成并缓存 RecordCopier 避免每次 copy 反射构造。
  • 已知限制:record 作为 target 时无法原地写入已有实例,当前语义为重建并返回新 record 实例。

@zhou-hao zhou-hao merged commit c33f18d into 5.0.x Jul 14, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant