Netty学习笔记(二)--AbstractBootStrap

本文详细探讨了Netty中AbstractBootStrap类的用途,包括其泛型定义、成员变量如group、channelFactory、localAddress、options、attrs和handler的解释。此外,还介绍了validate()、register()和bind()等关键方法的工作原理,揭示了如何初始化和注册channel,以及如何进行绑定操作。
摘要由CSDN通过智能技术生成

简介

基于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) {
   
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值