참조: http://download.fr.forge.objectweb.org/asm/asm-guide.pdf

컴파일된 클래스 생성 또는 변경할 때 사용하는 핵심 API는 ClassVisitor 인터페이스.
이 API는 다음 순서대로 사용해야 함.
1. visit 호출.
2. visitSource 최대 한번 호출 가능.
3. visitOuterClass 최대 한번 호출 가능.
4. visitAnnotation과 visitAttribute 원하는 만큼 호출 가능.
5. visitInnerClass, visitField, visitMethod 원하는 만큼 호출 가능.
6. visitEnd 호출.
주요 구성요소
- ClassReader: 바이트 배열로 받은 컴파일된 클래스를 파싱하고 accept 메서드의 인자로 전달된 ClassVisitor 객체에 있는 visitXxx 메서드를 호출한다. 이벤트 공급자.
- CLassWriter: ClassVisitor 인터페이스 구현체로, 직접 바이트 형식으로 컴파일된 클래스를 만든다. toyteArray 메서드로 컴파일된 클래스를 담고 있는 바이트 배열을 가져올 수 있다. 이벤트 소비자.
- ClassAdapter: ClassVisitor 인터페이스 구현체로, 이 객체에 대한 모든 메서드 호출을 다른 ClassVisitor 인스턴스에 위임한다. 이벤트 필터.