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组件初始化部分的源码了。未完待续。。。。。。
- Tomcat源码阅读之初始化Server组件
- Tomcat源码阅读之初始化连接器组件
- 1、Tomcat源码阅读之初始化流程梳理
- Tomcat源码阅读(一)初始化
- Tomcat源码阅读#1:classloader初始化
- Tomcat源码阅读之过滤器
- tomcat源码阅读之Digester
- Tomcat源码阅读(四)Server
- Tomcat源码阅读之StandarWrapper源码分析
- Memcached源码阅读之初始化参数解析
- Memcached源码阅读之资源初始化
- Memcached源码阅读之初始化参数解析
- Tomcat源码解析(四):tomcat核心组件初始化和启动
- Tomcat源码阅读之Server.xml文件的处理与Catalina启动流程
- Tomcat源码阅读之Server.xml文件的处理与Catalina启动流程
- Tomcat源码阅读之Mapper分析
- Tomcat源码阅读之Init过程
- Tomcat源码阅读之Load过程
- XmlSerializer 对象的Xml序列化和反序列化
- Python练习100例-6
- 欢迎使用CSDN-markdown编辑器
- Java "==" 和 .equals()的区别
- 在小米手机上调试react-native白屏问题
- Tomcat源码阅读之初始化Server组件
- java企业级应用之术语篇
- JDBC数据访问操作流程
- 【转载】颜色列表
- 基于ASP.NET MVC URL 权限控制
- <linux> 學習map
- Java多线程
- 字符串哈希函数
- [python] 专题九.Mysql数据库编程基础知识