概述
本文主要讲述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
这几个方法都是将传入的参数做简单的保存,这里就不多阐述