트랜잭션 관리를 간편하게 하기 위해 사용된다.
사전 지식 - Reflection
구체적인 타입을 알지 못해도, 클래스의 정보(메서드, 메서드인자, 변수, 타입) 등에 접근할 수 있게 해주는 자바 기본 API이다. JVM
내 ClassLoader
에 의해 Method Area
에 저장되는 메서드 관련 정보들을 가져온다.
Bean 생성시 @Transactional
애너테이션이 있으면, Runtime 시점에 동적으로 프록시 객체를 만들어 스프링 Bean
으로 등록한다.
이 때 프록시 객체를 만드는 방법은 두가지가 존재한다.
java.lang.reflect.Proxy
클래스를 이용해 인터페이스를 구현한 프록시 객체를 생성한다.
인터페이스 기반을 프록시 객체를 생성하기 때문에 상속한 인터페이스를 구현한 경우에만 프록시를 생성할 수 있다
public interface Animal {
void eat();
}
public interface Mammal extends Animal {
void walk();
}
public class Dog implements Mammal {
@Override
public void eat() {
System.out.println("Dog is eating");
}
@Override
public void walk() {
System.out.println("Dog is walking");
}
}