服务提供者@Service注解上面设置了属性protocol="protocol1",application.yml文件里面只是配置了protocol1.name=dubbo/rest,为什么这样就能实现调用过程中使用的是不同的协议了呢?这就是靠着SPI机制实现的。
Java中的SPI机制没有做到按需加载,而dubbo可以依靠键值对的形式来控制要加载哪些类,dubbo源码中有很多的项目,如果我们配置了协议名称是rest,那就会去源码中rest项目中找该项目中的META-INF/services文件,根据指定协议类去加载。