Apache Mina 文档翻译 - 第十七章 - Spring整合

16 篇文章 0 订阅
15 篇文章 0 订阅
[size=x-large]第十七章 - Spring整合[/size]

本章中演示了如何把MINA应用程序和Spring框架整合在一起。 文章的内容来源于http://www.ashishpaliwal.com/blog/2008/11/integrating-apache-mina-with-spring/

[size=medium]应用程序的结构[/size]

我们创建一个标准结果的MINA应用程序:

一个IoHandler
两个Filter - LoggingFilter 和 ProtocolCodecFilter
基于UDP的NioDatagram Socket

[size=medium]初始化代码[/size]

我们先看一下代码,为了简单我们把多余的代码去掉了


public void initialize() throws IOException {

// 创建一个Acceptor
NioDatagramAcceptor acceptor = new NioDatagramAcceptor();

// 添加一个IoHandler
acceptor.setHandler(new ServerHandler());

acceptor.getFilterChain().addLast("logging",
new LoggingFilter());
acceptor.getFilterChain().addLast("codec",
new ProtocolCodecFilter(new SNMPCodecFactory()));

// 创建Session Configuration
DatagramSessionConfig dcfg = acceptor.getSessionConfig();
dcfg.setReuseAddress(true);
logger.debug("Starting Server......");
// 绑定端口开始监听
acceptor.bind(new InetSocketAddress(DEFAULT_PORT));
logger.debug("Server listening on "+DEFAULT_PORT);
}


[size=medium]整合[/size]

要整合到Spring环境里,要做下面的事情:

设置IoHandler
创建一个Filter并加入到过滤器链
创建Socket并设定Socket参数

注意:最新的MINA中已经不包含面向Spring整合的专用包。现在的包本身都是对整合非常友好的,也就是可以很容易的整合到所有的DI框架。

我们看一下Spring的XML配置文件。我已经移除了XML中通用的部分,只留下了跟本章相关的内容。下面的例子来至于MINA发布包中的Chat的例子。可以在那里找到完成的内容。

现在把东西放到一起。

我们来看一下Spring的环境配置文件的IoHandler


<!-- IoHandler的实现 -->
<bean id="trapHandler" class="com.ashishpaliwal.udp.mina.server.ServerHandler">

下面创建一个过滤器实例和过滤器链

<bean id="snmpCodecFilter" class="org.apache.mina.filter.codec.ProtocolCodecFilter">
<constructor-arg>
<bean class="com.ashishpaliwal.udp.mina.snmp.SNMPCodecFactory" />
</constructor-arg>
</bean>

<bean id="loggingFilter" class="org.apache.mina.filter.logging.LoggingFilter" />

<!-- 过滤器链 -->
<bean id="filterChainBuilder" class="org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder">
<property name="filters">
<map>
<entry key="loggingFilter" value-ref="loggingFilter"/>
<entry key="codecFilter" value-ref="snmpCodecFilter"/>
</map>
</property>
</bean>


在这里我们创建了IoFilter的实例。在ProtocolCodecFilter中我们通过构造函数注入的方式把ProtocolCodec工厂传递给ProtocolCodecFilter。 LoggingFilter的创建非常直接。当我们定义好所有的过滤器实例后,开始创建过滤器链。我们定义了一个名为filterChainBuilder的bean,并把过滤器添加到里面。现在基本上都准备完毕,可以创建Socket并绑定监听端口。

下面是创建Socket相关的代码:


<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<entry key="java.net.SocketAddress">
<bean class="org.apache.mina.integration.beans.InetSocketAddressEditor" />
</entry>
</map>
</property>
</bean>

<!-- 定义IoAccepter,绑定到161端口 -->
<bean id="ioAcceptor" class="org.apache.mina.transport.socket.nio.NioDatagramAcceptor" init-method="bind" destroy-method="unbind">
<property name="defaultLocalAddress" value=":161" />
<property name="handler" ref="trapHandler" />
<property name="filterChainBuilder" ref="filterChainBuilder" />
</bean>


现在我们已经创建了IoAcceptor,设置IoHandler和过滤器链。现在我们做一个函数来启动Spring环境,读取配置文件,进而启动我们的应用程序。代码如下:


public void initializeViaSpring() throws Exception {
new ClassPathXmlApplicationContext("trapReceiverContext.xml");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值