簡體   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