2017-03-22 1 views

답변

1

와 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"); 

당신이 당신에 대해이 튜토리얼을 here 트릭을 읽어야 Javassist를 사용하여 호를 모르는 경우 모든 필드 참조가 참조에 대한 CtField 필드에 대한 모든 참조를 대체하는 CodeConverter를 사용하여 수행됩니다 "재배 선" NameID이라는 필드에 ctClass을 입력하십시오. 필드 이름을 NameID으로 변경하기 전에이 작업을 수행해야합니다.

그러나 모든 참조가 업데이트되지만 set/get 메서드 이름은 여전히 ​​getMessageIDsetMessageID입니다. 다음과 같이 동일한 참조 번호 ctClass을 사용하여 쉽게 변경할 수 있습니다.

CtMethod getter = ctClass.getDeclaredMethod("getMessageID"); 
getter.setName("getNameId"); 
CtMethod setter = ctClass.getDeclaredMethod("setMessageID"); 
setter.setName("setNameId"); 
관련 문제