ClassFileTransformer

ClassFileTransformer (클래스 파일 변환기)

ClassFileTransformer은 클래스 파일의 변환기(transformer)예요. 에이전트는 addTransformer 메서드를 사용해 이 인터페이스의 구현을 등록하여, 클래스가 로드되거나 재정의(redefined) 또는 재변환(retransformed)될 때 변환기의 transform 메서드가 호출되게 해요. 구현은 여기에 정의된 transform 메서드 중 하나를 오버라이드해야 해요. 변환기는 클래스가 JVM에 정의되기 전에 호출돼요.

출처: Java API Reference

본문

두 종류의 변환기가 있으며, Instrumentation.addTransformer(ClassFileTransformer,boolean)canRetransform 파라미터로 결정돼요:

  • canRetransformtrue로 추가된 재변환 가능 변환기
  • canRetransformfalse이거나 Instrumentation.addTransformer(ClassFileTransformer)로 추가된 재변환 불가 변환기

변환기가 addTransformer로 등록되면 매 새 클래스 정의와 매 클래스 재정의마다 변환기가 호출돼요. 재변환 가능 변환기는 매 클래스 재변환 때도 호출돼요.

새 클래스 정의 요청은 ClassLoader.defineClass 또는 그 네이티브 동등물로 이루어져요. 클래스 재정의 요청은 Instrumentation.redefineClasses 또는 그 네이티브 동등물로 이루어져요. 클래스 재변환 요청은 Instrumentation.retransformClasses 또는 그 네이티브 동등물로 이루어져요.

변환기는 요청 처리 중, 클래스 파일 바이트가 검증되거나 적용되기 전에 호출돼요. 변환기가 여러 개면 변환 호출 체이닝으로 변환이 합성돼요. 즉 한 transform 호출이 반환한 바이트 배열이 다음 호출의 입력(classfileBuffer 파라미터)이 돼요.

더 알아보기 (Learn more)

Java 공식 API