Java动态代码

比较C++和java ,后者是编译成java class文件,执行时动态生产java类,所以就有泛型时不能通过设置值就确定了具体的class类型,也有了动态生产可执行的方法和类,这里持续记录

---------------------------------

一 JDK动态代理

为了方便理解动态代理 ,我先一句话说明白静态代理:

就是代理类和被代理类都继承一个接口,代理类里有个被代理类的field,暴露给外界的时代理类,代理类的每个方法都执行一下代理的逻辑,再调用被代理类。

开始说jdk的动态代理,还是需要一个接口类,就是把原来代码里直接的 被代理类.方法()的调用方式, 换成了反射方式调用,代码的编写上少了许多,不需要每个方法都写一遍了。

二 cglib动态生成类来实现代理模式:

public class MainTest5 {
public static void main(String[] args)
{
if (true) {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(OOMObject.class);
enhancer.setUseCache(false);
enhancer.setCallback(new MethodInterceptor() {
public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
System.out.println("before doPrint");
Object o = proxy.invokeSuper(obj, args);
System.out.println("after doPrint");
return o;
}
});
Object o = enhancer.create();
((OOMObject)(o)).doPrint();
((OOMObject)(o)).doPrint2();
}
}
static class OOMObject { //没有static关键字 main方法里会报错
public void doPrint(){
System.out.println("doPrint");
}
public void doPrint2(){
System.out.println("doPrint2");
}
}
}
执行结果:

三 javaassist 动态生成类

    dubbo源码里有,有空整理下,哈哈哈。

猜你喜欢

转载自www.cnblogs.com/thinkqin/p/11760279.html