下面介紹一下CGLib代理java
package cglib; import org.springframework.cglib.proxy.Enhancer; import org.springframework.cglib.proxy.MethodInterceptor; import org.springframework.cglib.proxy.MethodProxy; import java.lang.reflect.Method; /** * Created by dingshuangkun on 2018/1/8. */ public class CGLibProxy implements { public <T> T getProxy(Class<?> cls){ return (T)Enhancer.create(cls,this); } @Override public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable { before(); Object obj = methodProxy.invokeSuper(o,objects); after(); return obj; } public void before(){ System.out.println("----before----"); } public void after(){ System.out.println("----after-----"); } }
實現CGLib代理也比較簡單,實現MethodInterceptor接口便可spring
@Test public void cglibTest(){ CGLibProxy cgLibProxy = new CGLibProxy(); GreetingImpl greetingProxy= cgLibProxy.getProxy(GreetingImpl.class); greetingProxy.sayHello("ding"); greetingProxy.sayNiHao("ding"); }
運行結果ide
----before----
hello ding
----after-----
----before----
niHao ding
----after-----
this