dubbo源码解析(dubbo容器部分)

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

其中SpringContainerdubbo服务发步成单独的服务节点的时候就是作为启动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

 

 

 

 

猜你喜欢

转载自ttxsj.iteye.com/blog/2010417