知识边界
Lifecycle家族
衍生点
类图
Lifecycle家族.pngLifecycle
定义了启动停止的生命周期控制的常用接口。这一方面典型的应用是控制异步处理。
小贴士:这个接口并不意味着自动启动的意义,如果需要考虑自动启动,可以使用SmartLifecycle接口。
这个接口可以被在容器中的bean实现,也可以是容器本身。容器会将启动/停止信号传送到每个容器中应用的所有组件,例如在运行时的停止/重启场景。
可以直接调用 或者通过JMX来管理操作。
注意,当前的{@code Lifecycle}接口只支持顶级的单例bean </b>。在任何其他组件上,{@code Lifecycle}接口将保持未检测到,因此将被忽略。另外,注意扩展的{@link SmartLifecycle}接口提供了与应用程序上下文的启动和关闭阶段的复杂集成。
SmartLifecycle
Lifecycle接口的扩展,主要用于以一个特定的顺序来启动 刷新 关闭。
isAutoStartup方法返回的值指的是当容器刷新的时候,这个Object是否已经启动,stop对于具有异步关闭进程的对象非常有用。这个接口的任何实现必须在关闭完成时调用回调的{@code run()}方法,以避免在整个{@code ApplicationContext}关闭过程中出现不必要的延迟。
SmartLifeCycle继承了Phased接口,实现了getPhased方法,返回的值表示启动和关闭方法执行的顺序,。
例如 组件B依赖于组件A,那么组件A的getPhased方法返回的值应该小于组件B。在关闭的方法中组件B应该先执行停止方法。
一个明确的依赖关系将会影响他的getPhased的数值大小,因为要保证一个组件启动的时候,他的依赖已经启动,组件关闭的方法必须在他的依赖方法执行之前执行。
上下文中的任何没有实现{@code SmartLifecycle}的{@code Lifecycle}组件都将被视为具有{@code 0}的相位值。这允许一个{@code SmartLifecycle}组件开始之前那些{@code生命周期}组件如果{@code SmartLifecycle}组件有一个负相位值,或{@code SmartLifecycle}组件可能会在这些{@code生命周期}组件之后如果{@code SmartLifecycle}组件都有一个正的相位值
LifecycleProcessor
在应用上下文中执行生命周期方法的策略接口。
DefaultLifecycleProcessor
LifecycleProcessor接口的默认实现。
网友评论