5

Solon2 的应用生命周期 - 带刺的坐椅

 1 year ago
source link: https://www.cnblogs.com/noear/p/17171744.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Solon 框架的应用生命周期包括:一个初始化函数时机点 + 六个事件时机点 + 两个插件生命时机点 + 两个容器生命时机点(v2.2.0 版本的状态):

1885228-20230302144302407-1647058652.png
  • 启动过程完成后,项目才能正常运行(启动过程中,不能把线程卡死了)
  • AppBeanLoadEndEvent 之前的事件,需要启动前通过 EventBus.subscribe(...) 订阅

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 应用停止事件

事件订阅示例

  • 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
@FunctionalInterface
public interface Plugin {
    void start(AopContext 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 时执行 停止

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK