一、应用生命周期
一个应用程序从 “启动” 到最后 “停止”,这一整个过程即为“应用生命周期”。“应用生命周期”中的关键点,则称为“时机点”。
Solon 的应用生命周期如下图所示(像个机器人)。其中,时机点包括有:一个初始化函数时机点 + 六个应用事件时机点 + 三个插件生命时机点 + 两个容器生命时机点(v2.2.0 版本的状态):
重要提醒:
- 启动过程完成后,项目才能正常运行(启动过程中,不能把线程卡死了)
- AppBeanLoadEndEvent 之前的事件,需要启动前完成订阅!!!(否则,时机错过了)
1、一个初始化函数时机点
@SolonMain
public class App{
public static void main(String[] args){
Solon.start(App.class, args, (app)->{
//应用初始化时机点
});
}
}
2、六个应用事件时机点
事件说明
事件 | 说明 | 备注 |
---|---|---|
6.AppInitEndEvent | 应用初始化完成事件 | 只支持手动订阅 |
8.AppPluginLoadEndEvent | 应用插件加载完成事件 | 只支持手动订阅 |
b.AppBeanLoadEndEvent | 应用Bean加载完成事件(即扫描完成) | |
e.AppLoadEndEvent | 应用加载完成事件(即启动完成) | |
::运行 | ||
g.AppPrestopEndEvent | 应用预停止事件 | |
j.AppStopEndEvent | 应用停止事件 |
事件订阅示例
- AppInitEndEvent (时机点“b”之前的事件需要手动订阅),还有些在类扫描之前发出的事件,也需要提前订阅
@SolonMain
public class App{
public static void main(String[] args){
Solon.start(App.class, args, app->{
app.onEvent(AppInitEndEvent.class, e->{
//...
});
});
}
}
- AppLoadEndEvent
@Component
public class AppLoadEndEventListener implements EventListener<AppLoadEndEvent>{
@Override
public void onEvent(AppLoadEndEvent event) throws Throwable {
//event.app(); //获取应用对象
}
}
- AppStopEndEvent,v2.1.0 后支持
@Component
public class AppStopEndEventListener implements EventListener<AppStopEndEvent>{
@Override
public void onEvent(AppStopEndEvent event) throws Throwable {
//event.app(); //获取应用对象
}
}
3、三个插件生命时机点
插件的本质,即在应用生命周期中获得关键执行时机的接口。从而有效获得应用扩展能力。
- 插件接口 Plugin
public interface Plugin {
void start(AppContext context) throws Throwable;
default void prestop() throws Throwable{}
default void stop() throws Throwable{}
}
- 执行时机
接口 | 执行时机 | 说明 |
---|---|---|
7.start | 在应用初始化完成后执行 | 启动 |
f.prestop | 在 ::stop 前执行 | 预停止 |
h.stop | 在 Solon::stop 时执行 | 停止(启用安全停止时,prestop 后等几秒再执行 stop) |
4、两个容器生命时机点
接口 | 执行时机 | 说明 |
---|---|---|
d.start | 在扫描完成之后执行 | 启动 |
i.stop | 在 Solon::stop 时执行,在插件(h.stop)后执行 | 停止 |