96SEO 2026-02-23 11:43 11
专栏地址https://time.geekbang.org/column/intro/100027701

第一个原则是先创建子组件再创建父组件子组件需要被“注入”到父组件中。
第二个原则是先创建内层组件再创建外层组件内层组建需要被“注入”到外层组件。
最直观的做法就是将图上所有的组件按照先小后大、先内后外的顺序创建出来然后组装在一起。
但这样的方式问题很大一方面组件很多可能会造成遗漏而且代码也会很冗余另一方面不利于后期的功能拓展。
为了解决这个问题我们希望找到一种通用的、统一的方法来管理组件的生命周期LifeCycle
接口里应该定义这么几个方法init()、start()、stop()
调用是由它的父组件的状态变化触发的上层组件的初始化会触发子组件的初始化上层组件的启动会触发子组件的启动因此我们把组件的生命周期定义成一个个状态把状态的转变看作是一个事件。
而事件是有监听器的在监听器里可以实现一些逻辑并且监听器也可以方便的添加和删除这就是典型的观察者模式。
接口里加入两个方法添加监听器和删除监听器。
除此之外我们还需要定义一个
NEW、INITIALIZING、INITIALIZED、STARTING_PREP、STARTING、STARTED
当我们定义好了接口就要去写实现类实现它而在一个接口的不同实现类里可能很多逻辑都是一样的。
那子类如何重用这部分逻辑呢常见的方法就是定义一个基类来实现共同的逻辑然后让各个子类去继承它就达到了重用的目的。
而基类中往往会定义一些抽象方法所谓的抽象方法就是说基类不会去实现这些方法而是调用这些方法来实现骨架逻辑。
抽象方法是留给各个子类去实现的并且子类必须实现否则无法实例化。
Lifecycle接口的基础上定义了如下四个抽象方法交给子类实现并在内部逻辑中调用了该方法
(!state.equals(LifecycleState.NEW))
{invalidTransition(Lifecycle.BEFORE_INIT_EVENT);}try
事件的监听器setStateInternal(LifecycleState.INITIALIZING,
调用具体子类的初始化方法initInternal();//4.
事件的监听器setStateInternal(LifecycleState.INITIALIZED,
负责触发事件并调用监听器的方法。
那是什么时候、谁把监听器注册进来的呢
自定义了一些监听器这些监听器是父组件在创建子组件的过程中注册到子组件
Catalina。
注意Tomcat和Java程序不是一个类加载器
的启动就算完成了。
这些启动类或者组件不处理具体请求它们的任务主要是“管理”管理下层组件的生命周期并且给下层组件分配任务也就是把请求路由到负责“干活儿”的组件。
{log.fatal(sm.getString(catalina.noServer));return;}//3.
CatalinaShutdownHook();}Runtime.getRuntime().addShutdownHook(shutdownHook);}//
LifeCycleBase它的生命周期被统一管理并且它的子组件是
{service.setServer(this);synchronized
将老的数据复制过去System.arraycopy(services,
services.length);results[services.length]
触发监听事件support.firePropertyChange(service,
service);}}从上面的代码你能看到它并没有一开始就分配一个很长的数组而是在添加的过程中动态地扩展数组长度当添加一个新的
实例时会创建一个新数组并把原来数组内容复制到新数组这样做的目的其实是为了节省内存空间。
中读取数据如果读到的数据是停止命令“SHUTDOWN”就退出循环进入
StandardService我们先来看看它的定义以及关键的成员变量。
作为“管理”角色的组件最重要的是维护其他组件的生命周期。
此外在启动各种组件时要注意它们的依赖关系也就是说要注意启动的顺序。
我们来看看
触发启动监听器setState(LifecycleState.STARTING);//2.
{connector.start();}}}}从启动方法可以看到Service
监听器最后才是启动连接器。
这很好理解因为内层组件启动好了才能对外提供服务才能启动外层的连接器组件。
而
在容器组件之后启动。
组件停止的顺序跟启动顺序正好相反的也是基于它们的依赖关系。
还实现了子容器的“增删改查”甚至连子组件的启动和停止都提供了默认实现比如
{results.add(startStopExecutor.submit(new
Valvehost.getPipeline().getFirst().invoke(request,
response);}}这个基础阀实现非常简单就是把请求转发到
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback