InvocationHandler — 프록시 호출 핸들러 인터페이스
InvocationHandler — 프록시 호출 핸들러 인터페이스
InvocationHandler는 프록시 인스턴스(proxy instance)의 호출 핸들러가 구현하는 인터페이스예요. 각 프록시 인스턴스는 연관된 호출 핸들러를 가져요. 프록시 인스턴스에 메서드가 호출되면, 그 메서드 호출은 인코딩되어 호출 핸들러의 invoke 메서드로 전달돼요. 이 방식으로 프록시는 실제 대상 객체 대신 가로챈 호출을 처리할 수 있어요.
본문
Object invoke(Object proxy, Method method, Object[] args) throws Throwable — 프록시 인스턴스에서 메서드 호출을 처리해요. 인자를 프록시 인스턴스의 method로 호출한 결과를 반환해요. 인자 proxy는 메서드가 호출된 프록시 인스턴스, method는 프록시 인터페이스에서 호출된 Method 인스턴스, args는 원래 인자 배열(기본 타입은 박싱되어 전달)이에요. 이 메서드가 던지는 체크 예외는 해당 프록시 인터페이스가 선언한 예외와 일치해야 해요.
static Object invokeDefault(Object proxy, Method method, Object... args) throws Throwable — 프록시의 상속된 인터페이스에서 선언된 default 메서드를 호출해요. 이 메서드는 method가 default 메서드가 아닐 때 등에 IllegalArgumentException을 던질 수 있어요.
InvocationHandler는 java.lang.reflect.Proxy를 사용해 동적 프록시를 만들 때 핵심적인 역할을 해요. 동적 프록시의 각 메서드 호출은 이 핸들러의 invoke로 라우팅되어 AOP, 지연 로딩, 접근 제어 같은 가로채기 패턴을 구현할 수 있어요.