用Javassist可以更改字段名稱和所有從舊的字段名稱到新的引用。
ClassPool classpool = ClassPool.getDefault();
CtClass ctClass = classpool.get(Sample.class.getName());
CtField field = ctClass.getField("messageID");
CodeConverter codeConverter = new CodeConverter();
codeConverter.redirectFieldAccess(field, ctClass, "NameID");
ctClass.instrument(codeConverter);
field.setName("NameID");
如果你不知道何用Javassist
你應該閱讀本教程here 訣竅關於「重新佈線」的所有字段引用使用CodeConverter
將替換爲CtField
領域的所有引用的參考文獻做到名爲NameID
的字段ctClass
。請記住,在將該字段重命名爲NameID
之前,需要完成此操作。
但是,您應該記住所有引用都已更新,但set/get方法名稱仍爲getMessageID
和setMessageID
。你可以很容易地改變,使用ctClass
相同的參考如下:
CtMethod getter = ctClass.getDeclaredMethod("getMessageID");
getter.setName("getNameId");
CtMethod setter = ctClass.getDeclaredMethod("setMessageID");
setter.setName("setNameId");