setAccessible()을 사용하여 필드의 접근성 플래그를 설정할 수있는 것과 비슷한 필드를 Java에서 리플렉션을 사용하여 일시적으로 유지해야하는지 여부를 지정할 수있는 간단한 방법이 있습니까?Java에서 리플렉션을 통해 필드의 일시적인 속성/플래그를 설정할 수 있습니까?
1
A
답변
0
Java API에서이를 직접 수행 할 수있는 방법은 없지만 JRebel 또는 LiveRebel http://www.zeroturnaround.com/jrebel/comparison/과 같은 것으로 가능합니다. http://asm.ow2.org/의 ASM과 같은 것을 사용하여 관련 필드에서 바이트 코드를 임시 변경자로 다시 쓸 수 있습니다. 그런 다음 JRebel/LiveRebel을 트리거하여 클래스의 런타임 버전을 대체하십시오.
ASM에서는이 작업을 자동화하지 않았지만 IntelliJ IDEA와 함께 JRebel을 사용하여 대화식 개발 중에 성공적으로 변경 사항을 수행했습니다.
1
반사 자체로 코드를 변경할 수 없습니다.
자바 에이전트는 클래스가로드 될 때 클래스를 다시 작성할 수 있도록 허용해야합니다.
리플렉션을 사용하여 serialPersistentFields
(존재하지 않는 경우)을 직렬화 메커니즘이 클래스 데이터를 캐시하기 전에 변경할 수 있습니다. 직렬화 메커니즘 내부의 데이터를 변경하기 위해 버전 특정 방식으로 리플렉션을 사용할 수 있습니다.