简介
基于Netty实现的无论是客户端还是服务端,启动类都继承自AbstractBootAStrap类,因此这篇文章我们详细的剖析一下这个类里面到底有些什么东西。
类定义
public abstract class AbstractBootstrap<B extends AbstractBootstrap<B, C>, C extends Channel> implements Cloneable
这里用到了泛型定义,其中B必须是AbstractBootStrap的子类,C必须是Channel的子类(这样一来使用更加灵活)。
成员变量
包含的成员变量有以下这些:
volatile EventLoopGroup group;
@SuppressWarnings("deprecation")
private volatile ChannelFactory<? extends C> channelFactory;
private volatile SocketAddress localAddress;
// The order in which ChannelOptions are applied is important they may depend on each other for validation
// purposes.
private final Map<ChannelOption<?>, Object> options = new LinkedHashMap<ChannelOption<?>, Object>();
private final Map<AttributeKey<?>, Object> attrs = new ConcurrentHashMap<AttributeKey<?>, Object>();
private volatile ChannelHandler handler;
接下来一一来看每个属性是如何设置的:
group
public B group(EventLoopGroup group) {
ObjectUtil.checkNotNull(group, "group");
if (this.group != null) {
throw new IllegalStateException("group set already");
}
this.group = group;
return self();
}
group是EventLoop线程组,注意到group只能被设置一次,所以同一个bootstrap不能反复调用group(group)方法。
channelFactory
public B channel(Class<? extends C> channelClass) {
return channelFactory(new ReflectiveChannelFactory<C>(
ObjectUtil.checkNotNull(channelClass, "channelClass")
));
}
channelFactory顾名思义就是创建channel实例的工厂,用于生产channel。channelFactory()方法有两个版本,旧版本已经被标记为@Deprecated,但是新版本里面还是调用了旧版本的这个方法。
localAddress
public B localAddress(SocketAddress localAddress) {