一、概述
在第四节中,分析了ServerBootstrap的bind()方法,主要分析了initAndRegister方法,这个方法调用的层次很深,还有几个主要的地方没有讲到,其中在initAndRegister()调用的ServerBootstrap.init()方法里面会用pipeline.addlast()方法。前面分析过new NioServerSocketChannel是默认创建DefaultChannelPipeline。所以就看io.netty.channel.DefaultChannelPipeline#addLast(io.netty.channel.ChannelHandler…)方法
二、ChannelPipeline 的addLast
public final ChannelPipeline addLast(EventExecutorGroup executor, ChannelHandler... handlers) {
if (handlers == null) {
throw new NullPointerException("handlers");
}
for (ChannelHandler h: handlers) {
if (h == null) {
break;
}
//executor=null
//name =null
//h=new ChannelInitializer<Channel> 上一节分析提到的特殊handler
addLast(executor, null, h);
}
return this;
}
addLast(executor, null, h);源码
public final ChannelPipeline addLast(EventExecutorGroup group, String name, ChannelHandler handler) {
//group=null
//name =null
//handler=new ChannelInitializer<Channel>
final AbstractChannelHandlerContext newCtx;
synchronized (this