这一章节,我们来研读下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