Tomcat源码阅读之初始化Server组件

来源:互联网 发布:淘宝网经营策略 编辑:程序博客网 时间:2024/06/04 23:21

组件都实例化完之后,便进入到了组件的初始化过程,进行initialize操作,注意这里的初始化跟前面的实例化是两个不同的操作。
首先初始化的是Server组件。

public void initialize()        throws LifecycleException    {        lifecycle.fireLifecycleEvent(INIT_EVENT, null);        initialized = true;                             。                             。                             。                             略        // Initialize our defined Services        for (int i = 0; i < services.length; i++) {            services[i].initialize();        }    }

中间省略了部分JMX的代码,Tomcat中关于JMX的代码比较多,感兴趣的同学可以自行研究下哇。
执行初始化操作的时候,首先触发了init事件,那么先来看看监听器模式在Tomcat中的运用。平常我们使用的监听者模式一般都有三个必须元素,分别是事件源,事件和监听者。事件源是产生事件的地方,即被监听者,对于事件一般都会定义成相应的事件类型,监听者一般封装了产生事件之后的处理逻辑。一个使用监听器模式的完整流程就是在事件源上绑定相应的事件,触发了监听的事件的时候调用监听器里的方法进行处理。比如进行web开发的时候,一般会在按钮上绑定click事件,点击按钮的时候触发click事件,这时便会调用监听者的方法进行处理。
Tomcat中的事件一般由组件产生,而组件都实现了Lifecycle接口,因此可以把Lifecycle接口看成事件源。组件上注册的事件类型一般为init,start,before_start等,事件由LifecycleEvent接口表示。注册的事件触发之后,会调用LifecycleListener接口的实现类去处理,LifecycleListener接可以看做监听器。一般一个组件上都会注册若干个监听器,为了方便管理监听器,Tomcat提供了个工具类LifecycleSupport。LifecycleSupport提供了一个listeners数组和addLifecycleListener,findLifecycleListeners,removeLifecycleListener三个方法用于管理监听器,组件中增加和移除监听器,实质都是调用LifecycleSupport类的相关方法,对listeners数组进行增加和删除,这样所有组件增加和移除监听器的操作都在一个listeners数组中完成,使监听器的管理变的简单。当组件中有事件产生的时候,就会调用LifecycleSupport类的fireLifecycleEvent方法,将事件交给监听器处理。
顺着这个思路,不难理解init事件的处理过程,首先产生init事件,接着调用监听init事件的监听器进行处理,处理完之后将StandardServer中的initialized属性设置为true,表示Server已经执行了初始化操作。
接着就该初始化Service组件了,由于一个Server组件中可能有多个Service组件,因此需要将Service组件一个一个的初始化。那么接下来就该阅读Service组件初始化部分的源码了。未完待续。。。。。。

0 0
原创粉丝点击