[英]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.