DynamoDbImmutable与DynamoDbBean注解的区别咨询
DynamoDbImmutable 与 DynamoDbBean 注解的核心区别
定位与适用类类型
@DynamoDbImmutable:专为不可变数据类设计,对应Kotlin中用val定义属性的data class,或Java中字段为final且无setter的类。它要求类的所有属性通过构造器初始化,全程只读,适合需要保证数据不可篡改的场景,比如值对象、事件溯源数据。@DynamoDbBean:面向可变JavaBean风格类,对应Kotlin中用var定义属性的类,或Java中带标准getter/setter的类。依赖属性访问器完成序列化/反序列化,支持对象创建后修改属性值,适配传统业务中需要动态更新实体的场景。
使用限制与示例
@DynamoDbImmutable 用法
必须配合全参数构造器使用,Kotlin的data class默认满足该要求,属性全部为只读:
@DynamoDbImmutable data class ImmutableUser( @get:DynamoDbPartitionKey val userId: String, val username: String, val email: String )
这类实例创建后无法修改任何属性,从根源避免数据意外变更。
@DynamoDbBean 用法
需要提供属性的getter,setter可选,若需反序列化填充数据则通常需要,属性支持可变:
@DynamoDbBean data class MutableUser( @get:DynamoDbPartitionKey var userId: String? = null, var username: String? = null, var email: String? = null )
实例创建后可随时修改username、email等属性,适配业务中需要动态更新实体的场景。
序列化/反序列化机制差异
@DynamoDbImmutable:SDK通过反射调用类的全参数构造器创建实例,读取DynamoDB数据时将字段值传入构造器;写入时提取构造器参数值映射到DynamoDB字段。@DynamoDbBean:SDK通过getter方法读取属性值写入DynamoDB;读取数据时通过setter方法(或直接设置字段)填充对象属性。
内容的提问来源于stack exchange,提问作者blahblah
相关产品推荐
相关产品推荐

