关于CGlib代理示例
jdk动态代理是基于接口的代理,CGlib代理是基于类的代理,本篇就一个小例子说明下, 直接上代码
一、 准备工作 引入 相关 CGlib的jar包 比如 cglib-2.2.2.jar
二、直接上例子
2.1)创建一个 HelloImpl.java类
package proxy;
/**
* Created by yanzz on 2017/6/16.
*/
public class HelloImpl {
public void sayHello(){
System.out.println("say Hello...");
}
}
2.2)创建一个CGlib代理类 CGLibProxy 实现 MethodInterceptor 接口
package proxy;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import java.lang.reflect.Method;
/**
* Created by yanzz on 2017/6/16.
* cglib 对于类的代理
*/
public class CGLibProxy implements MethodInterceptor {
public <T> T getProxy(Class<T> cls){
return (T) Enhancer.create(cls, this);
}
@Override
public Object intercept(Object obj, Method method, Object[] args,
MethodProxy proxy) throws Throwable {
before();
Object result = proxy.invokeSuper(obj, args);
after();
return result;
}
public void before(){
System.out.println("before....");
}
public void after(){
System.out.println("after...");
}
}
2.3)创建测试类 Test.java
package proxy;
/**
* Created by yanzz on 2017/6/16.
*/
public class Test {
public static void main(String [] args){
CGLibProxy cglibProxy = new CGLibProxy();
HelloImpl he = cglibProxy.getProxy(HelloImpl.class);
he.sayHello();
}
}
运行示例即可
before....
say Hello...
after...
say Hello...
after...
ps: 个人微信号 YanD879 欢迎小伙伴一起探讨技术。就说csdn上看见即可