webx2.0-框架初始化

类图

webx2.0-框架初始化_第1张图片

流程

由于web.xml中配置的请求webxCntrollerServlet,因此容器会先创建servlet的实例,servlet在初始化时会调webxControllerServlet的configure创建一个webxController实例并进行初始化,下面是时序图:

webx2.0-框架初始化_第2张图片

流程详解

2.1 取得日志目录
     1、ServletContex参数的定义是在整个程序中且独立于各个单独的servlet的,同时也提供给程序中的所有servlet;而ServletConfig中的参数是只提供给定义它的Servlet的,同一程序中的其他servlet是无法使用的;也就是说ServletContext相当于全局变量,ServletConfig相当于局部变量。
     2、先取当前servlet的参数,找不到再找全局,还是找不到就用默认参数;最后生成日志目录。
2.2 创建引导资源加载器,其实是new一个具体的类来加载资源文件
2.3 取得系统的属性配置(由jvm取得),并将loggingRoot、localHost、localAddress参数赋予属性集合中。
2.4 配置log4j日志系统:装在log4j的配置文件,根据后缀名解析该配置文件。
2.5 取得scheme的实现:搜索schema的实现类,并取得shcema实现类的实例。
2.6 取得规格化的servletPaths,啥玩意?
2.7 取得webx的配置文件
     1、找$applicationRoot/WEB-INF/webx.xml,自然没有
     2、取得读取webx配置文件的configuration类
     3、读取webx.xml并存储在主configuration中
     4、查找并装入所有组件的配置文件
          (1)基于web.xml中的init参数查找所有的组件名
          (2)为每一个组件生成一个引导资源加载器(其实是原加载器维持了一份map)
          (3)读取每个组件目录下的webx.xml并合并在主configuration中
2.8 设置默认的services和配置项(经典的webx方案)
     1、先试图查找WEB-INF/webx-default.xml,如果找到,则装载并作为默认配置文件,合并到configuration中
     2、装在TURBIE的配置文件,合并到configuration中
2.9 初始化serviceManager
     1、取得DefaultWebxServiceManager并实例化
     2、将configuration和引导资源加载器传给该manager
     3、初始化
          (1)创建service名称和service配置的映射,这个映射是根据配置文件中的设置产生的
               ①根据configuration中的key取得所有instanses的名称
               ②取得所有instances的instanceConfiguration保存在map中
               ③遍历configuration中的class,实例化service instance,保存在map中:services.put(instanceKey, instance)
               ④采用set来取得service names,再加上Resourceloaderservice
               ⑤将未声明的service补全,包括main和instance的?
          (2)初始化ResourceLoaderService
          (3)初始化那些earlyInit=true的service instances
2.10 将webx controller实例设置到servlet context中,以便外部系统可以使用
2.11 如果指定了initAllServices,则强制初始化所有services。这里调用各个Service的默认实现的init方法

四、一些感悟1、首先,容器启动时,将初始化 WebxControllerServlet       WebxControllerServlet 将判断当前的 ServlerContext中有没有名为webx.context的属性 (该属性保存的是WebxController,webx M-V-C框架 的入口)如果是初次启动,WebxController是不存在的。   因此WebxControllerServlet将通过 WebxLoader装载和初始化webx中的 services,它负责完成主要的初始化操作, 然后将框架的配置保存在 WebxController中,以后处理请求的时候就可以直接通过该对象完成 。       WebxLoader用来加载并完成框架的初始化; WebxController则是用来保存框架初始化好之后的信息。
 2、WebxLoader初始化时将创建一个WebappStarpResourceLoaderService负责读取webx 的配置文件.   对于多 car结构的应用将从根WebappBootStartpResourceLoaderService(InstanceNamenull) 中再为每个 car分别实例化一个WebappBootStartpResourceLoaderService对象( 在初始化每个carDefaultResourceLoaderService 时完成)   该对象中保存 car实例的名称(WebappBootStartpResourceLoaderService.instanceName) ,取资源时将把该名称加入到资源路径,例如 WEB-INF/webx.xml将会变为WEB-INF/ instanceName/webx.xml.
   webx初始化的时候,将两次为每个 car生成WebappResourceLoaderService ,一次是在读取每个carwebx.xml 文件的时候;一次是初始化每个car对应的DefaultResourceLoaderService 的时候,两次都是通过 BootstarpResourceLoaderService.getInstance())。 

3、initMapping()完成的主要工作是:
  分析应用包含的 car的数量(Instance) Service的数量.  解析属于每个 Instance的配置信息和InstanceContext信息,并为每个 Service分别创建一个ServiceInstance(这个对象中包含 Service的类名以及配置信息等,将用于创建 Service对象,每个 Service只会被初始化一次,初始化的次数通过 ServiceInsatnce的控制,注意的是一个Service不管是上文提及 4种类型中的哪一种,都将为每个 Componentmain-instance 创建一个 ServiceInstacne,有些ServiceInstacne并不会被真正使用到 )



你可能感兴趣的:(webx)