1.一个特殊的ChannelInboundHandler
,它提供了一种Channel
注册到EventLoop
后初始化Channel
的简便方法。实现最常用于Bootstrap.handler(ChannelHandler)
,ServerBootStrap.handler(ChannelHandler)
和ServerBootStrap.childHandler(ChannelHandler)
.
public class MyChannelInitializer extends ChannelInitializer {
public void initChannel(Channel channel) {
channel.pipeline().addLast("myHandler", new MyHandler());
}
}
ServerBootstrap bootstrap = ...;
...
bootstrap.childHandler(new MyChannelInitializer());
...
2.ChannelInitializer
中声明了一个名为initChannel(Channel)
的抽象方法,
- 在
ServerBootstrap.init()
方法中,添加了一个ChannelInitializer
由于此时该Channel
还未注册到EventLoop
,在addLast()
方法中,会给pipeline添加一个PendingHandlerAddedTask
,待其注册到EventLoop
后,回调ChannelInitializer
的handlerAdded()
方法,此方法中右调用了initChannel(ChannelHandlerContext)
方法,该方法在执行最后将ChannelInitializer
从pipeline
中移除。