06_吃透eureka源码之EurekaBootStrap核心启动类的initEurekaServerContext方法(1)

1,DefaultEurekaServerConfig回顾

上一篇文章,我们已经对DefaultEurekaServerConfig类做了深入的分析和讲解,我们也知道了其中的设计思想和一些设计模式的使用。接下来我们将继续跟进其他源码的分析。

2,编码器深入分析

// For backward compatibility
        //V1版本的服务实例信息转换器
        JsonXStream.getInstance().registerConverter(new V1AwareInstanceInfoConverter(), XStream.PRIORITY_VERY_HIGH);
        XmlXStream.getInstance().registerConverter(new V1AwareInstanceInfoConverter(), XStream.PRIORITY_VERY_HIGH);

        logger.info("Initializing the eureka client...");
        logger.info(eurekaServerConfig.getJsonCodecName());
        //初始化服务器编码器  分别是 json和xml的编码器
        //CodecWrapper
        ServerCodecs serverCodecs = new DefaultServerCodecs(eurekaServerConfig);

这两行代码的作用都是一样的,就是注册编码解析,一个是json的,一个是xml的。

JsonXStream.getInstance().registerConverter(new V1AwareInstanceInfoConverter(), XStream.PRIORITY_VERY_HIGH);
XmlXStream.getInstance().registerConverter(new V1AwareInstanceInfoConverter(), XStream.PRIORITY_VERY_HIGH);

我就对一个进行相关的分析,进入到JsonXStream.getInstance()中。
在这里插入图片描述
默认注册ApplicationConverter应用对象信息的编码和反编码对象
默认注册ApplicationsConverter应用对象信息集合的编码和反编码对象
默认注册DataCenterInfoConverter数据中心对象信息的编码和反编码对象
默认注册InstanceInfoConverter实例对象信息的编码和反编码对象
默认注册LeaseInfoConverter服务续约对象信息的编码和反编码对象
默认注册MetadataConverter元数据对象信息的编码和反编码对象

这个类 V1AwareInstanceInfoConverter 中的源码中,我们可以看到扩展了状态的解析,获取当前服务实例状态的一个方法。
在这里插入图片描述

registerConverter(new V1AwareInstanceInfoConverter(),
XStream.PRIORITY_VERY_HIGH);
继续跟进到这个registerConverter中去。

根据优先级值注册到编码注册表中,继续跟进源码

在这里插入图片描述
DefaultConverterLookup 这个类中的registerConverter方法中,有一个优先级列表用来保存注册的解析实现类

private final PrioritizedList converters = new PrioritizedList();

在这里插入图片描述
匹配Converter实现类的时候通过优先值最高的进行匹配,通过源码可以看到
当前的集合中是否有,如果没有就遍历优先级集合,值越高的优先被匹配,然后保存到map中。
在这里插入图片描述

3,编码器的设计模式思考

Converter接口分析
在这里插入图片描述
Converter接口继承了ConverterMatcher接口,所有的接口都需要实现

boolean canConvert(Class type);
void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context);
Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context);

通过这个源码我们可以学习到:策略模式 + 优先级设计 + 享元模式
这个Converter有多个实现,并且把默认的实现都注册到优先级集合和map集合中去,当需要查找的匹配的Converter实现时,优先级最高的先匹配,匹配后的可以直接从map中获取,加快性能。

到此我们对注册Converter的源码分析完成,后续继续分析其他的源码。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值