Hessian 基本原理分析

此处不是对Hessian配置的描述,只对其基本原理分析。

1.创建代理类:

   在前端一般调用
HessianProxyFactory.create(Class serviceInterface,String url)
,获取对后台service的一个代理访问类对象;
    HessianProxyFactory.create方法的内部是这样做的:

  
 URL url = new URL(urlName);
    handler = new HessianProxy(this, url);

    return Proxy.newProxyInstance(loader, new Class[] { api, 
      HessianRemoteObject.class }, handler);


其中 Proxy.newProxyInstance 为Jdk提供的创建动态代理的工具类,
    api即为我们传入的,后端会实现的service的接口,
    loader为加载api,和HessianRemoteObject.class两个类所需要的ClassLorder,
    handler其实为回调类,重点其实在这里,完成了相应远程方法的调用,以及参数的序列化;

2.远程方法调用:

   第一步创建完动态代理类后,我们就得到了一个貌似对与后端类的引用,其实只是一个披着serviceInterface外衣的动态代理对象而已,当调用serviceInterface接口定义的相应方法时,
动态代理类就会去调用HessianProxy中定义的方法:

 public Object invoke(Object proxy, Method method, Object[] args)


在这个方法中,有调用
conn = sendRequest(mangleName, args);

在sendRequest方法中完成一次对后台的请求:如下
 URLConnection conn = this._factory.openConnection(this._url);
 os = conn.getOutputStream();
 AbstractHessianOutput out = this._factory.getHessianOutput(os);

      out.call(methodName, args);
      out.flush();

3.过滤器拦截请求:

   我们在web.xml里已经定义的过滤器,会拦截此次请求,然后调用相应的后端程序,然后,将结果序列化,返回。


4.前端 HessianProxy 中对返回结果进行反序列化,返回给业务程序

所以最重要的过程,对通讯过程的封装都是由 HessianProxy 完成,形成了前端调用后端程序,如后端调用后端一样简单的效果。

猜你喜欢

转载自chongquanyumo.iteye.com/blog/1843722