Solon v3.0.3

一、应用生命周期

</> markdown

一个应用程序从 “启动” 到最后 “停止”,这一整个过程即为“应用生命周期”。“应用生命周期”中的关键点,则称为“时机点”。

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)后执行停止