@Slf4j
public class TimeInvocationHandler implements InvocationHandler {
private final Object target;
public TimeInvocationHandler(Object target) {
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws
Throwable {
log.info("TimeProxy 실행");
long startTime = System.currentTimeMillis();
Object result = method.invoke(target, args);
long endTime = System.currentTimeMillis();
long resultTime = endTime - startTime;
log.info("TimeProxy 종료 resultTime={}", resultTime);
return result;
}
}
리플렉션을 이용한 동적프록시 JDK버전이다.
지정된 인터페이스 만들어서 그것을 구현하며 동작가능한데 invoke
에 대상 객체, 함수, 함수의 매개변수들등 이런거 정해진거 구현하며 함수사에이 실행할거 넣어주면 된다.
다만 JDK버전은 실재로직이 인터페이스로 구현되어있어야 가능하다는거같다.(이해 확실하지않음)
인터페이스를 생성해주면서 프록시를만들기때문에 그렇다.