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

Easter79
• 阅读 510

一,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调用了抽象方法来实现骨架逻辑。

点赞
收藏
评论区
推荐文章
Alex799 Alex799
3年前
vue最新面试题
最近在面试,总结几个重点的面试题:一、vue父子组件之间的传值:简单来说,子组件通过props方法接受父组件传来的值,子组件通过$emit方法来向父组件发送数据。(具体案例可以看我之前写的博客)。二、vue生命周期函数:beforeCreatecreatedbeforeMountmountedbeforeUpdateupdatedbeforeDestr
Chase620 Chase620
3年前
vue的8种通信方式
1.props/emit1.父组件向子组件传值下面通过一个例子说明父组件如何向子组件传递数据:在子组件article.vue中如何获取父组件section.vue中的数据articles:\'红楼梦','西游记','三国演义'\//section父组件<template<divclass"section"
Souleigh ✨ Souleigh ✨
3年前
React 组件间通信的10种方法
组件间通信方式总结父组件子组件:1.Props2.InstanceMethods子组件父组件:1.CallbackFunctions2.EventBubbling兄弟组件之间:1.ParentComponent不太相关的组件之间:1.Context2.Portals3.Global
爱丽丝13 爱丽丝13
3年前
React 组件通信之发布订阅模式
React通信react的数据流是单向的,react通信有以下几种方式:父向子通信:传入props子向父通信:父组件向子组件传一个函数,然后通过这个函数的回调,拿到子组件传过来的值父向孙通信:利用context传值。React.createContext()兄弟间通信:​1、找一个相同的父组件,既可以用pr
Chase620 Chase620
3年前
关于:父组件中的子组件中的子组件(孙级)添加数据后怎么样去调用父组件中的方法呢?
1、需求引入image.png这是父组件下的子组件的子组件,一个绑定子设备的弹出窗modal,那么我们怎么样在这个组件中选中子设备后点击确定时去触发父组件的父组件的table列表数据刷新呢?image.pngimage.pngimage.png组件的层级关系.png上述的图示便是部分代码的展示,一般的组件传值有父组件传子组件(
徐小夕 徐小夕
3年前
《精通react/vue组件设计》之5分钟教你实现一个极具创意的加载(Loading)组件
前言本文是笔者写组件设计的第八篇文章,今天带大家用5分钟实现一个极具创意的加载(loading)组件.涉及的核心知识点主要是css3相关特性,如果大家非常熟悉,可直接跳过介绍直接看正文.时刻问自己:是否具备创造力?笔记前端组件的一般分类:通用型组件:比如Button,Icon等.布局型组件:比如Grid,Layout布
Stella981 Stella981
3年前
Flutter子组件调用父组件方法修改父组件参数
子组件调用父级组件方法的主要实现是父组件给子组件传入一个方法,然后在子组件中调用父级方法来修改父级的参数。看一下效果图!(https://img2018.cnblogs.com/blog/1038765/201907/103876520190702152130487420290106.gif)父级组件实现在父级组件中写一个
Stella981 Stella981
3年前
Spring Boot快速入门(三):依赖注入
springboot使用依赖注入的方式很简单,只需要给添加相应的注解即可@Service用于标注业务层组件 @Controller用于标注控制层组件@Repository用于标注数据访问组件,即DAO组件 @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。然后在使用的地方使用@A
Easter79 Easter79
3年前
Swing自定义事件
1.Swing自定义事件将一个组件的事件传递给另一个组件.使用EventListenerList来管理事件,当A组件触发事件的时候,调用方法fireActionPerformed()来触发事件,然后再B组件中actionPerformed()方法来接收事件.当在容器KeyTextComponent中按下鼠标,我们就可以在Jframe中捕获触发的事
Stella981 Stella981
3年前
Angular使用总结
  之前自己写的公共组件,都是会先引入,需要调起的时候再通过service控制公共组件状态、值、回调函数什么的。但是有一些场景不适合这种方式,还是动态添加组件更加好。通过写过的一个小组件来总结下。创建组件  场景:鼠标移动到图标上时,展示解释性的说明文字。那就需要创建一个普通的tooltip组件。如下:!(https://oscim
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k