初次接触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;
}
分享到:
相关推荐
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学习笔记(修订版)
学习Mina不仅涉及网络编程的基本概念,还需要掌握如何利用它的事件驱动模型和非阻塞I/O机制来提高系统的可伸缩性和性能。通过不断实践和深入学习,开发者可以更好地掌握Mina框架,构建出高效、稳定和可维护的网络...
在MINA的学习笔记中,记录的所有API通常会包括以下几个核心部分: 1. **IoSession**: 这是MINA的核心接口,代表了客户端和服务器之间的连接。IoSession提供了读写数据、管理连接状态、获取会话属性等功能。例如,`...
在本学习笔记中,我们将专注于MINA的子项目——FtpServer,它是实现FTP服务器功能的一个模块。 FTP(File Transfer Protocol)是一种广泛使用的互联网协议,用于在不同主机之间传输文件。Apache MINA FtpServer提供...
1. **下载使用的Jar包**:在开始Mina2.0的学习之前,你需要从Apache官网或其他可靠的源下载Mina的最新版本库。通常,这包括核心库和其他依赖库,如slf4j用于日志记录。 2. **工程创建配置**:创建一个新的Java项目...
**Mina 学习笔记(入门)** Apache Mina 是一个高度可扩展的网络通信框架,主要用于构建高性能、高效率的服务器端应用。它提供了一种简单的方式来处理网络协议,如TCP/IP和UDP/IP,以及SSL/TLS加密的连接。在本学习...
### MINA学习笔记 #### MINA概述 MINA是一个用Java编写的高性能、轻量级的网络通信框架,主要用于简化网络编程的复杂性。它支持多种传输协议(如TCP/IP和UDP/IP),并且提供了一套丰富的API来处理网络通信相关的...
Apache Mina是一个强大的开源框架,专门用于构建高性能、高可扩展性的网络应用程序。Mina2.0是其一个重要的版本,提供了许多改进和新特性,使得开发者能够更轻松地处理网络通信任务,尤其是在Java NIO(Non-blocking...
《mina学习笔记》 Apache MINA(Multipurpose Infrastructure for Network Applications)是一个开源框架,主要设计用于简化网络应用程序的开发,尤其是TCP和UDP协议的应用。MINA 提供了一种与网络协议无关的API,...
在这个"Apache MINA2学习笔记DEMO"中,我们很可能会看到如何使用MINA来创建一个自定义协议的示例。自定义协议通常是为了满足特定应用的需求,例如高效的数据传输、安全性或者特定的编码格式。MINA允许开发者定义自己...
MINA 是一个网络应用框架,有助于用户非常方便地开发高性能、高伸缩性的网络应用。 此文档80多页,是方便Mina上手的文档。
最近使用Mina开发一个Java的NIO服务端程序,因此也特意学习了Apache的这个Mina框架。 引言 1 一. Mina入门 2 第一步.下载使用的Jar包 2 第二步.工程创建配置 2 第三步.服务端程序 3 第四步.客户端程序 6 第五步.长...