繁体   English   中英

使用 ByteBuddy 在 Java 对象上动态注入字段

[英]Dynamically inject fields on Java objects using ByteBuddy

我有这段代码,我需要(它)在运行时注入字段:

public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
    TestEntity entity = (TestEntity) source;
    entity.getPropertyMap().forEach((fieldName, fieldValue) -> {
      // "fieldName" is an arbritary name not known at compile time
      injectFieldTo(source, fieldName, fieldValue);
    });
    entity.setPropertyMap(null);
    super.marshal(source, writer, context);
}

有没有办法在 Java 中使用ByteBuddy做到这一点? 如果不是直接的(即使只有一个克隆对象),可以将这些字段注入到 object 中怎么办? 过程是什么?

TestEntity.java

public class TestEntity implements Serializable {
  private String entityType;
  private String entityId;
  private String dateCreated;
  private String dateUpdated;
  private Boolean publicRead;
  private Boolean publicWrite;
  private Map<String, Object> propertyMap;
}

您需要定义一个新的 class 来定义字段。 您可以通过new ByteBuddy().subclass(...)对现有 class 进行子类化,或使用new ByteBuddy().rebase(...)复制现有 class 并重命名它,以防可分配性不是问题。 您可以使用defineField API 定义新字段。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM