2010-08-02 1 views

답변

0

Java API에서이를 직접 수행 할 수있는 방법은 없지만 JRebel 또는 LiveRebel http://www.zeroturnaround.com/jrebel/comparison/과 같은 것으로 가능합니다. http://asm.ow2.org/의 ASM과 같은 것을 사용하여 관련 필드에서 바이트 코드를 임시 변경자로 다시 쓸 수 있습니다. 그런 다음 JRebel/LiveRebel을 트리거하여 클래스의 런타임 버전을 대체하십시오.

ASM에서는이 작업을 자동화하지 않았지만 IntelliJ IDEA와 함께 JRebel을 사용하여 대화식 개발 중에 성공적으로 변경 사항을 수행했습니다.

1

반사 자체로 코드를 변경할 수 없습니다.

자바 에이전트는 클래스가로드 될 때 클래스를 다시 작성할 수 있도록 허용해야합니다.

리플렉션을 사용하여 serialPersistentFields (존재하지 않는 경우)을 직렬화 메커니즘이 클래스 데이터를 캐시하기 전에 변경할 수 있습니다. 직렬화 메커니즘 내부의 데이터를 변경하기 위해 버전 특정 방식으로 리플렉션을 사용할 수 있습니다.