apache mima 过滤器

来源:互联网 发布:淘宝如何复制宝贝 编辑:程序博客网 时间:2024/05/16 03:25

apache mima 过滤器——IoFilterChain。

主要处理IoSession的事件,

IoSession和IoFilterChain是一对一的关系,一个IoSession生命周期中所有的事件都被IoFilterChian捕获。

IoFilterChain是IoFilter的容器,当某一事件触发,IoFilterChain中的IoFilter会按预定的顺序处理事件,最后可以把IoSession交给IoHander处理。

 

包:org.apache.mina.core.filterchain

类和接口:

DefaultIoFilterChain过滤器链的一个默认实现                                   DefaultIoFilterChainBuilder用来建造过滤器链,这是一个默认实现IoFilter过滤器,用来处理IoSession事件IoFilterAdapter过滤器适配器,程序员可继承这个类来定义过滤器,比直接实现IoFilter接口要好IoFilterChain过滤器链接口IoFilterChainBuilder链建造者接口IoFilterEvent过滤事件,封装了Io事件。程序员不会用到这个类,这个类是给mina内部组件用的IoFilterLifeCycleException生命周期异常

 

总体设计:结构清晰、简单

IoFilterChainBuilder 用一个List<Entity>集合作为链的存储,在这个存储的基础上建造过滤器链IoFilterChain。

IoFilterChain在逻辑上的结构类似于双向链表(head---entity2----...tail),有头有尾有顺序,用entity表示链的节点,每个节点的数据域存放的就是过滤器。

IoFilter接口让程序员能够定义自己的过滤器,以表达对IO的处理逻辑。IoFilterAdapter简化了程序员的工作量。

 

IoFilter的设计:方便程序员

Io事件爆发,过滤器链发出事件,第一个过滤器就开始自动执行。而接下来第二个过滤器如何执行呢?

IoFilterChain中的过滤器如何运行,apache mina并没有提供一个控制框架,而是把这个工作交给了程序员自己,具体是通过NextFilter来实现。

IoFilter中定义了一个接口NextFilter,并在IoFilterChain.EntryImpl中对NextFilter进行了实现,NextFilter主要的工作就是查找后一个节点,并让过滤链继续调用后面的过滤器执行事件处理逻辑。这样,实际上就把链表中过滤器如何执行的权利交给了程序员。

程序员在自定义过滤器的处理逻辑中,可调用NextFilter继续到下一个过滤器,也可以让程序直接返回,如遇到异常或错误或其他情况。只要是逻辑需要,程序员可以灵活的或多或少的创建过滤器个数,以及处理执行的步骤。

 

 

 

 

原创粉丝点击