`
orangesun
  • 浏览: 10479 次
  • 性别: Icon_minigender_1
  • 来自: 龙的国度
社区版块
存档分类
最新评论

MINA学习笔记——奇怪的处理器DemuxingIoHandler

    博客分类:
  • MINA
阅读更多
初次接触MINA,看了看多处理器的代码,发现一些有意思的现象,按说写Apache框架的这些人都是高手的,怎么会犯这样的错,下面是DemuxingIoHandler的部分说明。这个类中有个方法要用深度优先遍历一颗继承树。
Consider the following type hierarchy (Cx are classes while Ix are interfaces): 

     C3 - I7 - I9
      |    |   /\
      |   I8  I3 I4
      |
     C2 - I5 - I6
      |
     C1 - I1 - I2 - I4
      |         |
      |        I3
    Object          
 
When message is of type C3 this hierarchy will be searched in the following order: C3, I7, I8, I9, I3, I4, C2, I5, I6, C1, I1, I2, I3, I4, Object. 


I7 既然是C3 的接口,从图中可以看出I8, I9, I3, I4 都是接口,那么I7 怎么可以继承2个接口,如果是实现I8 和I9,那I7 怎么还可能是接口?好奇怪的现象。。

下边是这个深度优先遍历的实现:
    private final Map<Class, MessageHandler> type2handler
             = new Hashtable<Class, MessageHandler>();
    private MessageHandler<Object> findHandler( Class type, Set<Class> triedClasses )
    {
        MessageHandler handler = null;

        if( triedClasses != null && triedClasses.contains( type ) )
            return null;

        /*
         * Try the registered handlers for an immediate match.
         */
        handler = type2handler.get( type );
        
        if( handler == null )
        {
            /*
             * No immediate match could be found. Search the type's interfaces.
             */
            
            if( triedClasses == null )
                triedClasses = new IdentityHashSet<Class>();
            triedClasses.add( type );
            
            Class[] interfaces = type.getInterfaces();
            for( int i = 0; i < interfaces.length; i ++ )
            {
                handler = findHandler( interfaces[ i ], triedClasses );
                if( handler != null )
                    break;
            }
        }
        
        if( handler == null )
        {
            /*
             * No match in type's interfaces could be found. Search the 
             * superclass.
             */
            
            Class superclass = type.getSuperclass();
            if( superclass != null )
                handler = findHandler( superclass );
        }
        
        /*
         * Make sure the handler is added to the cache. By updating the cache
         * here all the types (superclasses and interfaces) in the path which 
         * led to a match will be cached along with the immediate message type.
         */
        if( handler != null )
            findHandlerCache.put( type, handler );
        
        return handler;
    }
3
1
分享到:
评论

相关推荐

    Mina学习笔记

    Apache Mina是一个基于Java的网络通信框架,专为高性能、高可用性和可扩展性而设计。...在深入学习Mina的过程中,理解IoService及其子类的工作原理,以及如何结合IoHandler实现业务逻辑,对于掌握Mina框架至关重要。

    Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)

    Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)Apache Mina Server 2.0中文参考手册V1.0,Apache Mina2.0学习笔记(修订版)

    Mina2.0学习笔记(修订版).

    学习Mina不仅涉及网络编程的基本概念,还需要掌握如何利用它的事件驱动模型和非阻塞I/O机制来提高系统的可伸缩性和性能。通过不断实践和深入学习,开发者可以更好地掌握Mina框架,构建出高效、稳定和可维护的网络...

    mina学习笔记,记录所有API

    在MINA的学习笔记中,记录的所有API通常会包括以下几个核心部分: 1. **IoSession**: 这是MINA的核心接口,代表了客户端和服务器之间的连接。IoSession提供了读写数据、管理连接状态、获取会话属性等功能。例如,`...

    apache mina 学习笔记三(子项目FtpServer)

    在本学习笔记中,我们将专注于MINA的子项目——FtpServer,它是实现FTP服务器功能的一个模块。 FTP(File Transfer Protocol)是一种广泛使用的互联网协议,用于在不同主机之间传输文件。Apache MINA FtpServer提供...

    MIna2.0学习笔记

    1. **下载使用的Jar包**:在开始Mina2.0的学习之前,你需要从Apache官网或其他可靠的源下载Mina的最新版本库。通常,这包括核心库和其他依赖库,如slf4j用于日志记录。 2. **工程创建配置**:创建一个新的Java项目...

    Mina 学习笔记(入门)

    **Mina 学习笔记(入门)** Apache Mina 是一个高度可扩展的网络通信框架,主要用于构建高性能、高效率的服务器端应用。它提供了一种简单的方式来处理网络协议,如TCP/IP和UDP/IP,以及SSL/TLS加密的连接。在本学习...

    MINA学习笔记(仅供参考)

    ### MINA学习笔记 #### MINA概述 MINA是一个用Java编写的高性能、轻量级的网络通信框架,主要用于简化网络编程的复杂性。它支持多种传输协议(如TCP/IP和UDP/IP),并且提供了一套丰富的API来处理网络通信相关的...

    Mina2.0学习笔记(完整版).doc

    Apache Mina是一个强大的开源框架,专门用于构建高性能、高可扩展性的网络应用程序。Mina2.0是其一个重要的版本,提供了许多改进和新特性,使得开发者能够更轻松地处理网络通信任务,尤其是在Java NIO(Non-blocking...

    mina学习笔记

    《mina学习笔记》 Apache MINA(Multipurpose Infrastructure for Network Applications)是一个开源框架,主要设计用于简化网络应用程序的开发,尤其是TCP和UDP协议的应用。MINA 提供了一种与网络协议无关的API,...

    Apache mina2学习笔记DEMO

    在这个"Apache MINA2学习笔记DEMO"中,我们很可能会看到如何使用MINA来创建一个自定义协议的示例。自定义协议通常是为了满足特定应用的需求,例如高效的数据传输、安全性或者特定的编码格式。MINA允许开发者定义自己...

    Mina学习笔记(修订版)

    MINA 是一个网络应用框架,有助于用户非常方便地开发高性能、高伸缩性的网络应用。 此文档80多页,是方便Mina上手的文档。

    Apache_Mina2.0学习笔记

    最近使用Mina开发一个Java的NIO服务端程序,因此也特意学习了Apache的这个Mina框架。 引言 1 一. Mina入门 2 第一步.下载使用的Jar包 2 第二步.工程创建配置 2 第三步.服务端程序 3 第四步.客户端程序 6 第五步.长...

Global site tag (gtag.js) - Google Analytics