Dubbo代码解析
Dubbo中也有内置的容器接口就是类:
com.alibaba.dubbo.container.Container代码如下所示
@SPI("spring")
public interface Container {
/**
* start.
*/
void start();
/**
* stop.
*/
void stop();
}
也同样是spi扩展点。而且接口非常的简单,干净,在dubbo框架中一共出现了下面几种container实现:
com.alibaba.dubbo.container.spring.SpringContainer
com.alibaba.dubbo.container.jetty.JettyContainer
com.alibaba.dubbo.container.log4j.Log4jContainer
com.alibaba.dubbo.container.logback.LogbackContainer
其中SpringContainer在dubbo服务发步成单独的服务节点的时候就是作为启动spring的容器。整个dubbo是基于spring的。在看dubbo启动类中的启动容器代码:
for (Container container : containers) {
container.start();
logger.info("Dubbo " + container.getClass().getSimpleName() + " started!");
}
上面的代码就是dubbo启动配置激活的所有dubbo容器的。
其中就包括spring容器。
下面就重点分析下SpringContainer
Springcontainer是实现了com.alibaba.dubbo.container.Container的类。其中对start()
部分的实现代码如下:
public void start() {
String configPath = ConfigUtils.getProperty(SPRING_CONFIG);
if (configPath == null || configPath.length() == 0) {
configPath = DEFAULT_SPRING_CONFIG;
}
context = new ClassPathXmlApplicationContext(configPath.split("[,\\s]+"));
context.start();
}
首先取得spring配置文件目录通过环境属性,dubbo.spring.config(所有dubbo的可配置属性都是dubbo开头的,而且大部分都提供了默认值,保持可灵活可配置的同时又体现了易用性)。紧接着dubbo就开始干最核心的事情了借助spring来启动整个dubbo服务。有时间在看看怎么启动spring的