Primitive Service Model and Interceptor in HiveMind

<script type="text/javascript"> document.location.href="http://blog.csdn.net/mindhawk/archive/2006/12/16/1444994.aspx"; </script>     最简单的服务模式就是primitive service model。在这种模式下服务在第一次应用的时候就会被创建。这种创建方法对与服务工厂,拦截器工厂和一些由hivemind.module提供的基本服务是很合适的。
    在用户代码里面很少需要使用到这种模式。它主要是为了支持hivemind module自身的服务存在的(单例模式服务就是建立在几个由简单模式创建的服务基础上的)。
    简单模式的服务创建很简单,只包括创建核心服务和在必要时生成拦截器。核心服务的生成由指定的生成器完成,拦截器由指定的拦截器工厂生成。
    拦截器(Interceptor)简单点说就是把实际调用的对象包装起来,并且可以在调用被包装类的方法之前或之后做一些特定的处理。作为一个拦截器最大的特点是它必须和被包装的对象有相同的接口签名,用户程序不必关心调用的是拦截器还是实际对象。
    拦截器的生成一般有两种方法。一种是通过动态代码生成,这种方法的优点是调用开销小,只需要在生成时需要多一些的系统开销,缺点是代码编写难度大,调试复杂。另一种是通过java.lang.reflect.Proxy类或其它类似于它的技术,通过动态方法调用完成代理的生成,这种方法的优点是易于编写,但是需要大量的放射调用,增加了调用的系统开销。具体使用哪种方法生成拦截器HiveMind没有强制限定,用户可以在拦截器工厂里面指定。
    HiveMind在解析完模块描述符(XML配置文件)后,会为每一个服务扩展点(service-point)生成一个ServicePoint的对象用于管理和生成实际的核心服务。下图展示了整个类的结构。
service point
    一个服务扩展点主要就由上图确定的结构构成。Schema是用于定义参数格式的,Module是包含个扩展点的模块。ServiceImplementationConstructor负责生成核心服务,目前HiveMind支持两种生成方式,一种是直接从指定类生成,一种是由别的服务生成。HiveMind的基本构造工厂BuilderFactory就是由第一种构造方式直接从类生成,这种方式的好处是不需要Schema,不需要其它工厂支持,适合用于作为最地层的支持服务。ServiceModel是用于管理服务生成规则和生命周期的,目前HiveMind提供了简单模式, 单例模式与线程绑定模式基于池模式四种。用户也可以根据自己的需要可以很方便的对它进行扩展。ServiceInterceptorContribution是用于保存拦截器信息的,它会根据指定的拦截器工厂服务和指定的拦截器生成顺序为核心服务生成拦截器。
    现在再回讨论简单模式,当指定服务第一次被引用的时候,PrimitiveServiceModel会直接调用ServiceImplementationConstructor方法生成核心服务。如果有拦截器再调用ServiceInterceptorContribution的集合,依次对核心服务生成拦截器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值