• tomcat系列之五:Tomcat各个组件生命周期


    一,Tomcat中各个组件的关系

    1,组件有大有小,大组件管理小组件。比如Server管理Service,Service管理连接器和容器

    2,组件有内有外,外层组件控制内层组件。比如外层组件连接器负责对外交流,外层组件调用内层组件完成业务功能

    二,创建组件的顺序

    先创建子组件,再创建父组件,然后把子组件 注入 到父组件中

    先创建内层组件,再创建外层组件,然后把内层组件 注入 到外层组件中

    三,如何实现统一管理组件的生命周期

    1,LifeCycle接口

      每个组件都要经历创建,初始化,启动这几个过程(系统的不变点)。每个具体组件的初始化方法是不一样的(系统的变化点)。

    所以,可以把不变点抽象出来成为一个接口,这个接口和生命周期有关,叫LifeCycle。接口中只定义方法:init(),start(),stop(),destory()。然后每个具体的组件去实现这个方法。

    在父组件的init()方法中需要创建子组件并调用子组件的init()方法。在父组件的start()方法里调用子组件的start()方法。这样只需要调用最顶层组件,调用Server组件的init()和start()方法。这样整个Tomcat就被启动起来了。

    2,LifeCycle 事件

      组件的init(),start()调用是由它的父组件的状态变化触发的,上层组件的初始化会触发子组件的初始化,上层组件的启动会触发子组件的启动。可以把组件的生命周期定义成一个个状态,把状态的转变看做是一个事件。事件里有监听器,在监听器中实现一些逻辑,并且监听器也可以添加和删除。

      组件的生命周期:

    NEW,INITIALIZING,INITIALIZED,STARTING_PERP,STARTING,STARTED。  

      LifeCycle接口

    void init()
    void start()
    void stop()
    void destory()
    void addLifecycleListener(LifecycleListener)  添加监听器
    void removeLifecycleListener(LifecycleListener)  移除监听器

    当组件达到响应的状态,就触发响应的事件。比如NEW状态表示组件刚被实例化。当init()方法被调用时,状态就变成INITIALIZING状态,这时,会触发BEFOREinit_event事件,如果有监听器在监听这个事件,它的方法会被调用。

    3,LifeCycleBase 抽象基类

    定义一些抽象方法,基类不去实现这些方法。子类去实现这些方法。

    LifeCycleBase:

    abstract void initInternal()
    abstract void startInternal()
    abstract void stopInternal()
    abstract void destoryInternal()

    LifeCycleBase抽象类实现了LifeCycle接口中的所有方法,还定义了抽象方法交给子类去实现,这就是模板设计模式。LifeCycle调用了抽象方法来实现骨架逻辑。

  • 相关阅读:
    ASP.NET Core 企业级开发架构简介及框架汇总
    SQL Server中的联合主键、聚集索引、非聚集索引
    C#进阶系列——WebApi 异常处理解决方案
    C#进阶系列——WebApi 身份认证解决方案:Basic基础认证
    C#进阶系列——WebApi 接口参数不再困惑:传参详解
    实战 Windows Server 2012 群集共享卷
    SQL Server 表和索引存储结构
    SQL Server AlwaysOn架构及原理
    共轭分布
    反向传播BP为什么高效
  • 原文地址:https://www.cnblogs.com/inspred/p/10978151.html
Copyright © 2020-2023  润新知