动态java代码的使用方法

来源: 作者:佚名 2008-03-25 出处:pcdog.com

j2se  java  jsp  ssl  代理服务器  
上一页 1 2 3 
    5,InvocationHandler实现

    根据上面提到的java的内建代理模式,要实现一个InvocationHandler,下面这段代码展示了MyInvocationHandler 的主要部分:

    private class MyInvocationHandler implements InvocationHandler { String backendClassName;//实际的类名Object backend;//实际的类对象public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { /** *  在第一载入的时候通过loadClass来载入所需要的服务实现对象,后边每次检查java文件是否被修改过,*  如果被修改就unload当前的对象,编译并重新载入该类。

    */ Class clz = loadClass(backendClassName);if (backend.getClass() != clz) { backend = newDynaCodeInstance(clz);

    }

    // 调用有效的对象的方法return method.invoke(backend, args);}在MyInvocationHandler中保存了实现接口的类名和该类的一个对象,该对象也就是通过newDynaCodeInstance()方法得到的对象。在每一次调用该对象的方法的时候,java的Proxy机制保证了系统会自动调用MyInvocationHandler的invoke方法。

    这里采用反射进行动态载入的程序,调用的实际工作是在InvocationHandler的invoke方法中做的,因此InvocationHandler要保存实际的对象。

    代理模式的好处是从使用者看来如同调用实际的对象是一样的,而实际上可以通过代理对象,程序可以动态采用不同的接口实现来完成工作,这一过程只需要在Proxy.newProxyInstance()中给定不同的实现类即可。



上一页 1 2 3 
上一篇:EJB3.1计划中的特性
下一篇:专访Java之父Gosling:纵观Sun的开源