본문 바로가기

Java13

리플렉션 API - 클래스 정보 조회 리플렉션의 시작은 Class 리플렉션은 Class API를 사용하면 됩니다. 여러가지 메서드를 통해 Class에 있는 필드, 상위 클래스, 구현하고 있는 인터페이스, 메서드 목록 등에 접근할 수 있습니다. Class에 접근하는 방법 테스트를 위해 몇 가지 클래스를 정의하겠습니다. Book.java public class Book { private static String B = "Book"; private static final String C = "Book"; private String a = "a"; public String d = "d"; protected String e = "e"; public Book() { } public Book(String a, String d, String e) { th.. 2021. 11. 2.
바이트코드 조작 정리 바이트코드 조작 툴 활용 예 프로그램 분석 바이트코드를 읽으면서 코드에서 버그를 찾을 수 있습니다. 또한, 코드의 복잡도를 계산할 수 있습니다. 소스코드 없이 바이트코드만 있어도 이러한 것들이 분석 가능합니다. 클래스 파일 생성 원래 소스코드 대신에 실행할 프록시를 만들 수 있습니다. 스프링 AOP, Hibernate의 Lazy Loading, Mock 프레임워크 또한, 특정한 API 호출을 제한(방어)할 수 있습니다. 그리고 스칼라와 같은 JVM 언어들을 컴파일을 할때 바이트코드를 생성해냄으로써 JVM 위에서 돌아갈 수 있게끔 해줍니다. 그밖에 자바 소스 코드 건드리지 않고 코드 변경이 필요한 여러 경우에 사용할 수 있습니다. 프로파일러 프로파일러란 실행중인 애플리케이션이 메모리를 얼만큼 쓰고있는지, .. 2021. 10. 30.
javaagent 사용해보기 이전 글에서 Byte Buddy를 사용하여 바이트코드를 조작해봤습니다. 하지만 1가지 문제점이 있었습니다. import net.bytebuddy.ByteBuddy; import net.bytebuddy.implementation.FixedValue; import java.io.File; import java.io.IOException; import static net.bytebuddy.matcher.ElementMatchers.named; public class Masulsa { public static void main(String[] args) { try { new ByteBuddy().redefine(Moja.class) .method(named("pullOut")).intercept(FixedVa.. 2021. 10. 28.
바이트코드 조작 라이브러리 바이트코드 조작 라이브러리 ASM Javassist ByteBuddy 바이트코드 조작해보기 모자에서 토끼를 꺼내는 마술 Moja.java public class Moja { public String pullOut() { return ""; } } Masulsa.java public class Masulsa { public static void main(String[] args) { System.out.println(new Moja().pullOut()); } } 빈 문자열을 리턴하므로 빈 문자열이 출력됩니다. Byte Buddy 의존성 추가 net.bytebuddy byte-buddy 1.11.21 Masulsa 클래스에 코드 추가 import net.bytebuddy.ByteBuddy; import n.. 2021. 10. 27.