Solon2 之基础:四、应用启动过程与完整生命周期
串行的处理过程(含六个事件扩展点 + 两个函数扩展点),代码直接、没有什么模式。易明

提醒:
- 启动过程完成后,项目才能正常运行(启动过程中,不能把线程卡死了)
- AppBeanLoadEndEvent 之前的事件,需要启动前通过
EventBus.subscribe(...)订阅
1、事件订阅示例
- 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(); //获取应用对象
}
}
2、插件在应用生命周期里的时机点
插件的本质,即在应用生命周期中获得关键执行时机的接口。从而有效获得应用扩展能力。
- 插件接口 Plugin
@FunctionalInterface
public interface Plugin {
void start(AopContext context) throws Throwable;
default void prestop() throws Throwable{}
default void stop() throws Throwable{}
}
- 执行时机
| 接口 | 执行时机 | 说明 |
|---|---|---|
| start | 在 7 时机点执行 | 启动 |
| prestop | 在 ::stop 前执行 | 预停止 |
| stop | 在 ::ShutdownHook 时执行 | 停止(启用安全停止时,prestop 后等几秒再执行 stop) |
3、注解能力注册的合适时机点
- 比如,时机点5
public class DemoApp{
public void static main(String[] args){
Solon.start(DemoApp.clas, args, app->{
//比如注册Demo注解
Solon.context().beanAroundAdd(DemoAop.class, new DemoInterceptor());
});
}
}
- 比如,时机点6(借用 SolonBuilder,提前注册事件)
public class DemoApp{
public void static main(String[] args){
new SolonBuilder().onAppInitEnd(e -> {
//...时机点6
}).onAppLoadEnd(e->{
//...时间点e
}).start(JobApp.class, args);
}
}
- 比如,时机点7,通过插件机制。(如果是独立插件,请另参考 《插件扩展机制》)
定义一个插件
public class DemoPluginImp implements Plugin {
@Override
public void start(AopContext context) {
//比如注册Demo注解
context.beanAroundAdd(DemoAop.class, new DemoInterceptor());
}
}
//可通过[时机点5]注册插件
public class DemoApp{
public void static main(String[] args){
Solon.start(DemoApp.clas, args, app->{
app.pluginAdd(0, new DemoPluginImp()); //此处注册的插件,会在[时机点7]运行
});
}
}
//或可通过 app.yml 的配置,借用[时机点4]申明插件
//solon.plugin: "xxx.xxx.DemoPluginImp"
Solon2 之基础:四、应用启动过程与完整生命周期的更多相关文章
- 【IOS6.0 自学瞎折腾】(五)应用程序的启动过程和Application生命周期
一 :main函数入口 看下项目资源结构,其实程序的入口也是在main.m里面. #import <UIKit/UIKit.h> #import "BvinAppDelegate ...
- SpringBoot IoC启动流程、初始化过程及Bean生命周期各个阶段的作用
目录 SpringBoot IoC启动流程.初始化过程及Bean生命周期各个阶段的作用 简述 首先明确IoC容器是啥 准备-SpringApplication的实例化 启动-SpringApplica ...
- 小程序基础知识点讲解-WXML + WXSS + JS,生命周期
小程序基础 小程序官方地址,小程序开发者工具,点击此处下载.在微信小程序中有一个配置文件project.config.json,此文件可以让开发者在不同设备中进行开发. 微信小程序共支持5种文件,wx ...
- JavaEE基础(01):Servlet实现方式,生命周期执行过程
本文源码:GitHub·点这里 || GitEE·点这里 一.Servlet简介 Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容.使用S ...
- Android基础_1 四大基本组件介绍与生命周期
Android四大基本组件分别是Activity,Service(服务),Content Provider(内容提供者),BroadcastReceiver(广播接收器). 一.四大基本组件 Acti ...
- 1. spring5源码 -- Spring整体脉络 IOC加载过程 Bean的生命周期
可以学习到什么? 0. spring整体脉络 1. 描述BeanFactory 2. BeanFactory和ApplicationContext的区别 3. 简述SpringIoC的加载过程 4. ...
- 【转】Pro Android学习笔记(二):开发环境:基础概念、连接真实设备、生命周期
在Android学习笔记(二):安装环境中已经有相应的内容.看看何为新.这是在source网站上的Android架构图,和标准图没有区别,只是这张图颜色好看多了,录之.本笔记主要讲述Android开发 ...
- JavaEE基础(01):Servlet实现方式,生命周期执行...
一.Servlet简介Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容.使用Servlet,可以收集来自网页表单的用户输入,呈现来自数据库 ...
- SpringBean容器启动流程+Bean的生命周期【附源码】
如果对SpringIoc与Aop的源码感兴趣,可以访问参考:https://javadoop.com/,十分详细. 目录 Spring容器的启动全流程 Spring容器关闭流程 Bean 的生命周期 ...
- 【Android基础】Fragment 详解之Fragment生命周期
上一篇文章简单介绍了一下Fragment,这一篇文章会详细的说一下Fragment的生命周期和创建一个用户界面. Fragment的主要功能就是创建一个View,并且有一个生命周期来管理这个View的 ...
随机推荐
- [Python急救站课程]太阳花的绘制
太阳花的绘制 from turtle import * color('red', 'yellow') # 分别定义填充颜色 begin_fill() while True: forward(200) ...
- 花了三年时间开发的开源项目,终于500 个 Star 了!
waynboot-mall 商城项目从疫情开始初期着手准备,到现在已经经过了 3 年多的时间,从项目初期到现在,一个人持续迭代,修复漏洞,添加功能,经历了前端开发工具从 vue2.vue-cli 切换 ...
- 计算机网络之防火墙和Wlan配置
一.防火墙 防火墙(firewall)是一种安全设备,它的位置一般处于企业网络边界与外网交界的地方,用于隔离不信任的数据包 准确点讲,它就是隔离外网和内网的一道屏障,用于保护内部资源信息安全的一种策略 ...
- 查看API官方文档
盛年不重来,一日难再晨.及时宜自勉,岁月不待人. 学习一门语言, 了解其开发文档必不可少.开发文档就是我们在编程开发.维护.升级过程中的参考最全面.最权威的资料.我认为就是开发者为后人方便理解留下 ...
- 基于FFmpeg和Qt实现简易视频播放器
VideoPlay001 记得一键三连哦 使用qt+ffmpeg开发简单的视频播放器,无声音 视频解码使用的是软解码即只用CPU进行QPainter绘制每一帧图像,CPU占用过高 简单易学,适合小白入 ...
- SQLBI_精通DAX课程笔记_02_数据类型
SQLBI_精通DAX课程笔记_02_数据类型 PowerBi 和 Analysis Services 在数据加载环节,无论数据源是什么类型,都会自动将数据转化为DAX可用的数据类型集. 以下链接为微 ...
- excel柱状图自定x轴y轴
在Excel中,柱状图是一种常用的数据可视化方式,可以直观地展示不同数据之间的比较关系.默认情况下,Excel会根据数据自动生成X轴和Y轴的刻度和标签.然而,如果你想要自定义X轴和Y轴,在柱状图中显示 ...
- HoG / SIFT 学习指北
本文 OI / ACM 无关. Explain HoG 原文出处: N. Dalal, and B. Triggs, Histograms of oriented gradients for huma ...
- C++ Qt开发:ProgressBar进度条组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍Progres ...
- RISC-V系列单片机快速入门指南
如何获取芯片开发资料 方法一:按型号选择 我们更推荐采用按型号选择的方法,获取所对应型号芯片的开发资料,这能有效降低错误使用资料的风险! 沁恒官网首页的产品中心,点击青稞 RISC-V 通用系列,可跳 ...