| 
                         Chain是链条的意思,从build的方法可看出,ProcessorSlotChain是一个链表,里面添加了很多个Slot。具体的实现需要到DefaultProcessorSlotChain中去看。 
- public class DefaultProcessorSlotChain extends ProcessorSlotChain { 
 -  
 - AbstractLinkedProcessorSlot<?> first = new AbstractLinkedProcessorSlot<Object>() { 
 -  
 - @Override 
 -  
 - public void entry(Context context, ResourceWrapper resourceWrapper, Object t, int count, Object... args) 
 -  
 - throws Throwable { 
 -  
 - super.fireEntry(context, resourceWrapper, t, count, args); 
 -  
 - } 
 -  
 - @Override 
 -  
 - public void exit(Context context, ResourceWrapper resourceWrapper, int count, Object... args) { 
 -  
 - super.fireExit(context, resourceWrapper, count, args); 
 -  
 - } 
 -  
 - }; 
 -  
 - AbstractLinkedProcessorSlot<?> end = first; @Override public void addFirst(AbstractLinkedProcessorSlot<?> protocolProcessor) { protocolProcessor.setNext(first.getNext()); first.setNext(protocolProcessor); if (end == first) { end = protocolProcessor; } } @Override 
 - public void addLast(AbstractLinkedProcessorSlot<?> protocolProcessor) 
 -  
 - end.setNext(protocolProcessor); 
 -  
 - end = protocolProcessor; 
 -  
 - } 
 -  
 - } 
 
  
 
DefaultProcessorSlotChain中有两个AbstractLinkedProcessorSlot类型的变量:first和end,这就是链表的头结点和尾节点。 
创建DefaultProcessorSlotChain对象时,首先创建了首节点,然后把首节点赋值给了尾节点,可以用下图表示: 
 
将第一个节点添加到链表中后,整个链表的结构变成了如下图这样: 
 
将所有的节点都加入到链表中后,整个链表的结构变成了如下图所示: 
 
这样就将所有的Slot对象添加到了链表中去了,每一个Slot都是继承自AbstractLinkedProcessorSlot。而AbstractLinkedProcessorSlot是一种责任链的设计,每个对象中都有一个next属性,指向的是另一个AbstractLinkedProcessorSlot对象。其实责任链模式在很多框架中都有,比如Netty中是通过pipeline来实现的。 
知道了SlotChain是如何创建的了,那接下来就要看下是如何执行Slot的entry方法的了。 
执行SlotChain的entry方法 
lookProcessChain方法获得的ProcessorSlotChain的实例是DefaultProcessorSlotChain,那么执行chain.entry方法,就会执行DefaultProcessorSlotChain的entry方法,而DefaultProcessorSlotChain的entry方法是这样的: 
- @Override 
 -  
 - public void entry(Context context, ResourceWrapper resourceWrapper, Object t, int count, Object... args) 
 -  
 - throws Throwable { 
 -  
 - first.transformEntry(context, resourceWrapper, t, count, args); 
 -  
 - } 
 
  
 
也就是说,DefaultProcessorSlotChain的entry实际是执行的first属性的transformEntry方法。 
而transformEntry方法会执行当前节点的entry方法,在DefaultProcessorSlotChain中first节点重写了entry方法,具体如下: 
- @Override 
 -  
 - public void entry(Context context, ResourceWrapper resourceWrapper, Object t, int count, Object... args) 
 -  
 - throws Throwable { 
 -  
 - super.fireEntry(context, resourceWrapper, t, count, args); 
 -  
 - } 
 
  
                         (编辑:我爱故事小小网_铜陵站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |