코드 인젝션은 프로그램의 실행 중에 동적으로 코드를 수정하거나 추가하는 기술입니다. 이는 다양한 목적으로 사용될 수 있으며, 주로 디버깅, 프로파일링, AOP (Aspect Oriented Programming) 등에 활용됩니다.
Javassist는 자바 코드를 변경하고 생성하기 위한 라이브러리입니다. 이 라이브러리를 사용하면 실행 중인 자바 애플리케이션의 클래스 파일을 수정할 수 있습니다.
Javassist 사용법
-
Javassist 라이브러리 추가
Javassist를 사용하기 위해서는 프로젝트의 의존성에 Javassist 라이브러리를 추가해야 합니다. Maven 기준으로는 다음과 같이 추가할 수 있습니다:
<dependencies> <dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> <version>3.27.0-GA</version> </dependency> </dependencies>
-
코드 인젝션 예제
Javassist를 사용하여 코드 인젝션을 수행하는 예제를 살펴보겠습니다. 아래의 코드는
HelloWorld
클래스에hello
메소드를 추가하는 예제입니다.import javassist.*; public class CodeInjectionExample { public static void main(String[] args) throws Exception { ClassPool cp = ClassPool.getDefault(); CtClass cc = cp.get("HelloWorld"); CtMethod helloMethod = CtNewMethod.make("public void hello() { System.out.println(\"Hello, World!\"); }", cc); cc.addMethod(helloMethod); cc.writeFile(); HelloWorld obj = (HelloWorld) cc.toClass().newInstance(); obj.hello(); } }
위의 코드에서는
HelloWorld
클래스를 생성하고,hello
메소드를 추가했습니다. 메소드의 내용은System.out.println("Hello, World!");
로 지정되었습니다.코드를 실행하면 새로운
HelloWorld
객체를 생성하여hello
메소드를 호출하고, “Hello, World!”가 출력됩니다.
결론
Javassist는 자바 애플리케이션의 실행 도중에 코드를 수정하고 생성할 수 있는 강력한 라이브러리입니다. 코드 인젝션을 통해 다양한 기능을 추가하거나 애플리케이션의 동작을 변경할 수 있습니다. Javassist를 사용하면 동적인 코드 수정이 가능하므로, 유연하고 확장 가능한 애플리케이션을 개발할 수 있습니다.