목록BE (354)
오봉이와 함께하는 개발 블로그
스프링 핵심 원리 - 고급편 > 프록시 팩토리 예제Advice 만들기Advice는 프록시에 적용하는 부가 기능 로직이다. JDK 동적 프록시가 제공하는 InvocationHandler, CGLIB가 제공하는 MethodInterceptor의 개념과 유사하게 둘을 개념적으로 추상화 한 것이다.프록시 팩토리를 사용하면 둘 대신 Advice를 사용하면 된다.Advice를 만드는 가장 기본적인 방법은 아래 Spring에서 제공하는 클래스를 구현하면 된다.//// Source code recreated from a .class file by IntelliJ IDEA// (powered by FernFlower decompiler)//package org.aopalliance.intercept;import java..
스프링 핵심 원리 - 고급편 > 프록시 팩토리 소개인터페이스가 있는 경우에는 JDK 동적 프록시를 적용하고, 그렇지 않은 경우에는 CGLIB를 적용하려면 어떻게 해야할까?두 기술을 함께 사용할 때 부가 기능을 제공하기 위해 JDK 동적 프록시가 제공하는 InvocationHandler 와 CGLIB가 제공하는 MethodInterceptor 를 각각 중복으로 만들어서 관리해야 할까?특정 조건에 맞을 때 프록시 로직을 적용하는 기능도 공통으로 제공되었으면?Q. 인터페이스가 있는 경우 JDK 동적 프록시를 적용하고, 그렇지 않은 경우에는 CGLIB를 적용하려면 어떻게 해야할까?스프링은 유사한 구체적인 기술들이 있을 때 그것들을 통합해서 일관성 있게 접근할 수 있고, 더욱 편리하게 사용할 수 있는 추상화된 기..
스프링 핵심 원리 - CGLIBCGLIB: Code Generator Library바이트코드를 조작해서 동적으로 클래스를 생성하는 기술을 제공하는 라이브러리인터페이스가 없어도 구체 클래스만 가지고 동적 프록시를 만들 수 있다.외부 라이브러리이지만, 스프링 프레임워크가 스프링 내부 소스 코드에 포함하여 스프링을 사용한다면 별도로 의존성 추가 없이 사용 가능참고스프링의 ProxyFactory를 사용하면 되기 때문에 CGLIB를 직접 사용하는 일은 거의 없다.대략적인 개념만 알아보자.에제 코드JDK 동적 프록시에서 실행 로직을 위해 InvocationHandler를 제공했듯, CGLIB는 MethodInterceptor를 제공한다.package org.springframework.cglib.proxy;impo..
스프링 핵심 원리 - 고급편 > JDK 동적 프록시 적용 1이전 내용을 바탕으로 실제 적용 코드를 작성해보자.@RequiredArgsConstructorpublic class LogTraceBasicHandler implements InvocationHandler { private final Object target; // 프록시가 호출할 대상이 되는 클래스 private final LogTrace logTrace; @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { TraceStatus status = null; try { // Logtrace에 사용할 메시지 ..
스프링 핵심 원리 - 고급편 > JDK 동적 프록시 예제 코드A, B Interface / Implpublic interface AInterface { String call();}@Slf4jpublic class AImpl implements AInterface { @Override public String call() { log.info("A call"); return "a"; }}// ===========================================================public interface BInterface { String call();}@Slf4jpublic class BImpl implements BInterface { @Override pub..