나는라는 이름의 클래스가 Sample
나는 변수의 이름을 변경해야 할 messageID
에 NameID
해당 getter 및 setter도 업데이트되도록을.
public class Sample{
String messageID;
public String getMessageID() {
return MessageID;
}
public void setMessageID(String messageID) {
MessageID = messageID;
}
}
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
을 모르는 경우 여기 에서이 자습서를 읽어야합니다. 모든 필드 참조를 "다시 연결" CodeConverter
하는 방법은 에서 CtField
이름이 지정된 필드에 대한 참조에 대한 필드에 대한 모든 참조를 대체 하는 a 를 사용하여 수행 NameID
됩니다 ctClass
. 이 작업은 필드 이름을로 변경하기 전에 수행해야합니다 NameID
.
그러나 모든 참조는 업데이트되지만 set / get 메서드 이름은 여전히 getMessageID
및 setMessageID
. ctClass
다음 과 같은 참조를 사용하여 쉽게 변경할 수 있습니다 .
CtMethod getter = ctClass.getDeclaredMethod("getMessageID");
getter.setName("getNameId");
CtMethod setter = ctClass.getDeclaredMethod("setMessageID");
setter.setName("setNameId");
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다