ChannelInitializer组件分析

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)的抽象方法,

  1. ServerBootstrap.init()方法中,添加了一个ChannelInitializer
    ChannelInitializer组件分析_第1张图片
    由于此时该Channel还未注册到EventLoop,在addLast()方法中,会给pipeline添加一个PendingHandlerAddedTask,待其注册到EventLoop后,回调ChannelInitializerhandlerAdded()方法,此方法中右调用了initChannel(ChannelHandlerContext)方法,该方法在执行最后将ChannelInitializerpipeline中移除。
    ChannelInitializer组件分析_第2张图片
    ChannelInitializer组件分析_第3张图片

你可能感兴趣的:(Netty源码,Netty)