美文网首页
AbstractConfig.java

AbstractConfig.java

作者: 上海马超23 | 来源:发表于2018-11-14 21:42 被阅读0次

public class AbstractConfig {
public AbstractConfig(ConfigDef definition, Map<?, ?> originals, boolean doLog) {
// 这里的origin就是producer在new的时候传入的props键值对
this.originals = (Map<String, ?>) originals;
// 应该是合并了自定义的props和producer缺省的配置
this.values = definition.parse(this.originals);
}

// AbstractConfig的核心方法,通过反射实例化originals字段中指定的类
public <T> T getConfiguredInstance(String key, Class<T> t) {
    // 从合并总配置项values里获取指定key约定的class类型
    // 例如key = partitioner.class, value = DefaultPartitioner.class
    Class<?> c = getClass(key);
    // 无论是否Configurable对象,都是统一通过无参构造函数实例化
    Object o = Utils.newInstance(c);
    if (o instanceof Configurable)
        // Configurable接口的实例,单独调用约定的configure方法,传入originals键值对做初始化工作
        // 就可以在统一无参构造实例化的前提下,通过键值对入参达到个性化初始化
        ((Configurable) o).configure(this.originals);
    // 这里的t是显示要求的范式类型T,最后会做强转返回
    return t.cast(o);
}

}

相关文章

网友评论

      本文标题:AbstractConfig.java

      本文链接:https://www.haomeiwen.com/subject/eyusfqtx.html