【Vesta发号器源码】IdServiceImpl

Vesta发号器源码解析——IdServiceImpl

这个类是继承了AbstractIdServiceImpl的一个具体的实现

字段属性及构造方法

    //参数名称,用于在启动的时候传入标示使用synchronized关键字与否
    private static final String SYNC_LOCK_IMPL_KEY = "vesta.sync.lock.impl.key";
    //参数名称,用于在启动的时候传入标示使用Atomic与否
    private static final String ATOMIC_IMPL_KEY = "vesta.atomic.impl.key";
    //存储id生成器
    protected IdPopulator idPopulator;
    //构造方法,无参
    public IdServiceImpl() {
        super();
    }
    //构造方法,传入参数id类型名
    public IdServiceImpl(String type) {
        super(type);
    }
    //构造方法,传入参数id类型值
    public IdServiceImpl(long type) {
        super(type);
    }
    //构造方法,传入参数id类型枚举
    public IdServiceImpl(IdType type) {
        super(type);
    }

初始化方法

    @Override
    public void init() {
        //先初始化父类
        super.init();
        //然后初始化id生成器
        initPopulator();
    }

id生成器初始化

    
    public void initPopulator() {
        //如果不为空说明已经设置过了,跳过
        if (idPopulator != null){
            log.info("The " + idPopulator.getClass().getCanonicalName() + " is used.");
        } else if (CommonUtils.isPropKeyOn(SYNC_LOCK_IMPL_KEY)) {
            log.info("The SyncIdPopulator is used.");
            //启动时参数标识了使用synchronized关键字
            idPopulator = new SyncIdPopulator();
        } else if (CommonUtils.isPropKeyOn(ATOMIC_IMPL_KEY)) {
            //标识了使用atomic
            log.info("The AtomicIdPopulator is used.");
            idPopulator = new AtomicIdPopulator();
        } else {
            //默认采用Lock来实现
            log.info("The default LockIdPopulator is used.");
            idPopulator = new LockIdPopulator();
        }
    }

id生成器调用和id生成器设置

    //调用id生成器构成id
    protected void populateId(Id id) {
        idPopulator.populateId(timer, id, idMeta);
    }
    //设置id生成器
    public void setIdPopulator(IdPopulator idPopulator) {
        this.idPopulator = idPopulator;
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 点击查看原文 Web SDK 开发手册 SDK 概述 网易云信 SDK 为 Web 应用提供一个完善的 IM 系统...
    layjoy阅读 13,950评论 0 15
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,145评论 1 32
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,860评论 2 9
  • “我回来了!”换了鞋,容蓉进到自己房间,把包一扔,就重重地躺倒在床上。 母亲从厨房走进来:“回来了,这个周末有事吗...
    妙所阅读 706评论 1 2
  • 2018年4月21日 星期六 晴 今天上班,带李云哲到公司写作业,今天写作业的效率不高,上午没有写完。午...
    云哲云灿妈妈阅读 162评论 0 2