It's very simple sample for CGLib Proxy being used by Spring.
public static void main(String[] args) { Enhancer enhancer = new Enhancer(); // enhancer.setSuperclass(MemberServiceImpl.class); enhancer.setSuperclass(MemberService.class); enhancer.setCallback(new MethodCallLogInterceptor()); Object obj = enhancer.create(); MemberService memberService = (MemberService)obj; memberService.regist(new Member()); }
public class MethodCallLogInterceptor implements MethodInterceptor { MemberService memberService = new MemberServiceImpl(); public Object intercept(Object object, Method method, Object[] args, MethodProxy methodProxy) throws Throwable { System.out.println("before "); // Object returnValue = methodProxy.invokeSuper(memberService, args); Object returnValue = method.invoke(memberService, args); System.out.println("after "); return returnValue; } }