您的位置:首页 > 运维架构 > Tomcat

tomcat源码研读笔记—tomcat的初始化之二 StandardService的初始化

2018-03-21 17:30 501 查看
这一章节,我们来研读下StandardService,查看initialize方法源码如下:
        public void initialize()
   throws LifecycleException {
       if (initialized)
           throw new LifecycleException (
               sm.getString("standardService.initialize.initialized"));
        initialized = true;
       // Initialize our defined Connectors
       synchronized (connectors) {
               for (int i = 0; i < connectors.length; i++) {
                   connectors[i].initialize();
               }
        }
    }
从源码可以知道,standardService又将初始化操作传递给了Connector,但是同样的,我们在这里也疑惑了connectors属性是怎么来的,谁有动了我们的Connectors?有了上一次的经历,我们可以马上联想到了server.xml结构和Catalina中的createStartDigester,然后有了如下代码:
digester.addObjectCreate("Server/Service/Connector","org.apache.catalina.connector.http.HttpConnector","className");
digester.addSetProperties("Server/Service/Connector");
digester.addSetNext("Server/Service/Connector","addConnector","org.apache.catalina.Connector");
 
  Digester创建了一个HttpConnector实例,因为HttpConnector是实现了Connector接口的,所以利用addConnector方法,为Service的Connects属性进行了赋值操作。
我们也做一个小小的总述:
standardservice初始化的时候,给static属性进行了赋值,同时通过Digestar,实例化了HttpConnector,并通过addConnector方法,给HttpConnector进行了一些属性赋值,如:connector.setService(this),同时调用了Connector的初始化initialize方法
 
我们根据初始化调用的关系,绘制了下类图如下:



1,实现service接口的StandardService通过Digester调用addConnector方法将实现了Connector接口的HttpConnector进行了实例化
2,StandardService调用initialize初始化的时候,将调用已经实例化的HttpConnector初始化动作initialize

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: