netty源码解析---bootStrap的初始化

概述

本文主要讲述bootStrap的初始化

group()

这里以服务端的初始化为例子

//删除了非核心代码
public ServerBootstrap group(EventLoopGroup parentGroup, EventLoopGroup childGroup) {
        super.group(parentGroup);
        this.childGroup = childGroup;
        return this;
    }

从这里的初始化可以看出,对于childGroup是保存在本类的成员变量中,而对于parentGroup是保存在父类的成员变量中

channel()

对于channel这个方法传入的是一个Class对象

public B channel(Class<? extends C> channelClass) {
        //channelClass=NioServerSocketChannel.class
        return channelFactory(new ReflectiveChannelFactory<C>(
                ObjectUtil.checkNotNull(channelClass, "channelClass")
        ));
    }
 public B channelFactory(ChannelFactory<? extends C> channelFactory) {
        ObjectUtil.checkNotNull(channelFactory, "channelFactory");
        if (this.channelFactory != null) {
            throw new IllegalStateException("channelFactory set already");
        }
        this.channelFactory = channelFactory;
        return self();
    }

追溯到channelFactory的尽头可以发现,这个方法的主要作用就是保存一下channelFactory
那么这个channelFactory又是什么呢?

//删除了非关键代码
public class ReflectiveChannelFactory<T extends Channel> implements ChannelFactory<T> {
    private final Constructor<? extends T> constructor;
    public ReflectiveChannelFactory(Class<? extends T> clazz) {
        ObjectUtil.checkNotNull(clazz, "clazz");
            this.constructor = clazz.getConstructor();
    }
    @Override
    public T newChannel() {
            return constructor.newInstance();
    }

这个channelFactory是从一开始就new的ReflectiveChannelFactory,点进这个类,可以发现,这个类就是用来创建对象的工厂,而创建的对象正是传入的参数,对于服务端而言就是NioServerSocketChannel.class

option,childOption,handler,childHandler

这几个方法都是将传入的参数做简单的保存,这里就不多阐述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值