cglib动态代理简介说明
下文笔者讲述cglib动态代理简介说明,如下所示
例:
cglib动态代理简介
CGLib动态代理:
是基于底层字节码技术的一种代理技术
CGLib动态代理原理:
通过字节码技术为一个类创建子类
并在子类中采用方法拦截的技术拦截所有父类方法的调用
织入横切逻辑
img
例:
目标类
package com.java265.cglib;
public class Target {
public String execute() {
String message = "-----------test------------";
System.out.println(message);
return message;
}
}
通用代理类
package com.java265.cglib;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import java.lang.reflect.Method;
public class MyMethodInterceptor implements MethodInterceptor{
@Override
public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
System.out.println(">>>>MethodInterceptor start...");
Object result = proxy.invokeSuper(obj,args);
System.out.println(">>>>MethodInterceptor ending...");
return "result";
}
}
测试类
package com.java265.cglib;
import net.sf.cglib.proxy.Enhancer;
public class CglibTest {
public static void main(String[] args) {
System.out.println("***************");
Target target = new Target();
CglibTest test = new CglibTest();
Target proxyTarget = (Target) test.createProxy(Target.class);
String res = proxyTarget.execute();
System.out.println(res);
}
public Object createProxy(Class targetClass) {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(targetClass);
enhancer.setCallback(new MyMethodInterceptor());
return enhancer.create();
}
}
----运行以上代码,将输出以下信息------- *************** >>>>MethodInterceptor start... -----------test------------ >>>>MethodInterceptor ending... result
注意事项:
代理对象的生成过程由Enhancer类实现
具体步骤如下所示:
1.生成代理类Class的二进制字节码;
2.通过Class.forName加载二进制字节码,生成Class对象;
3.通过反射机制获取实例构造,并初始化代理类对象。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


