Solon2 的 Bean 生命周期
Solon 框架的 Bean 是被容器托管的,所以它的生命周期只限定在容器内部:
| 时机点 | 说明 | 补充 |
|---|---|---|
| AopContext::new() 是在应用初始化时执行 | ||
| ::new() | AopContext::beanScan() 时,符合条件的才会被构造 | 此时,未登记到容器 |
| afterInjection() | 所有字段注入后执行(需要实现 InitializingBean 接口) | v2.2.0 后支持 |
| ::登记到容器;并发布通知;订阅它的注入会被执行 | ||
| @Init | AopContext::start() 时执行。会根据依赖关系自动排序 | |
| start() | 同上(需要实现 LifecycleBean 接口) | v2.2.0 后支持 |
| stop() | AopContext::stop() 时执行(需要实现 LifecycleBean 接口) | v2.2.0 后支持 |

1、时机点介绍
::new()
即构建函数。是在 Bean 被扫描时,且符合条件才会执行。此时,还未入进容器
afterInjection()
需要实现 InitializingBean 接口。当所有字段完成注入后,才会执行。提示:
- 只能确保同步注入的内容是绝对可用
- 字段注入的 Bean ,它自身的 Bean 注入字段有可能未完成(可能仍在订阅等待中)
- 如果有字段一直未注入,则函数不会被触发!!!
@Init 和 start() 效果相同
都是在 AopContext::start() 时被执行。其中 start() 需要 实现 LifecycleBean 接口。此时 Bean 扫描已完成,一般的 Bean 都已进入容器。理论上:
- 所有的 Bean 都已产生
- 所有 Bean 的字段,都已完成注入
偶有些 Bean 是在 AopContext.start() 时才生产的,例外!
stop()
是在 AopContext::stop() 时被执行。也就是应用停止时被执行。时机时,比插件的 stop() 要晚一点。
2、应用
a)一般的组件
@Component
public class DemoCom{
}
b)实现 InitializingBean 接口的组件
@Component
public class DemoCom implements InitializingBean{
@Override
public void afterInjection(){
//当所有字段完成注入后,才会执行(如果有字段一直未注入,则函数不会被触发)
}
}
c)实现 LifecycleBean 接口的组件
这个接口,只对单例有效。非单例,仅扫描时产生的实例会被纳管。其它实例的生命周期要自己处理。
@Component
public class DemoCom implements LifecycleBean{
@Override
public void afterInjection(){
//当所有字段完成注入后,才会执行(如果有字段一直未注入,则函数不会被触发)
}
@Override
public void start(){
//在 AopContext:start() 时被调用。此时所有bean扫描已完成,订阅注入已完成
}
@Override
public void stop(){
//在 AopContext:stop() 时被调用。一般做些释放或停止类的工作
}
}
d)带 @Init 注解的组件
@Init 注解函数,与 LifecycleBean::start() 时机点相同。
@Component
public class DemoCom{
@Init
public void init(){
//在 AopContext:start() 时被调用。此时所有bean扫描已完成,订阅注入已完成
}
}
Solon2 的 Bean 生命周期的更多相关文章
- Spring之BeanFactory及Bean生命周期
1.spring通过BeanFactory灵活配置.管理bean,Spring对管理的bean没有任何特别的要求,完全支持对POJO的管理: 2.BeanFactory有个ApplicationCon ...
- Bean生命周期及BeanFactory
1.spring通过BeanFactory灵活配置.管理bean,Spring对管理的bean没有任何特别的要求,完全支持对POJO的管理: 2.BeanFactory有个ApplicationCon ...
- Spring Bean配置默认为单实例 pring Bean生命周期
Bean默认的是单例的. 如果不想单例需要如下配置:<bean id="user" class="..." scope="singleton&q ...
- Spring Bean 生命周期2
在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean的别名只能维持一个实例,而不是每次都产生一个新的对象使用Sin ...
- Spring bean 生命周期验证
一.从源码注释看bean生命周期 从JDK源码上看,BeanFactory实现类需要支持Bean的完整生命周期,完整的初始化方法及其标准顺序(格式:接口 方法)为: 1.BeanNameAware s ...
- Spring:Bean生命周期
关于Bean生命周期,我在网上找了两张图: 图1: 图2: 总结起来就是: Bean构建: Bean对象创建 > @Autowired | @Resource> @PostConstruc ...
- Spring事务,Bean生命周期
一.事务相关: 1.Spring事务基于Spring AOP切面编程: 2.AOP基于代理模式,得到需要开启事务的代码的代理对象: 3.而没有开启事务的Service方法里调用了开启事务 @Trans ...
- 【不懂】spring bean生命周期
完整的生命周期(牢记): 1.spring容器准备 2.实例化bean 3.注入依赖关系 4.初始化bean 5.使用bean 6.销毁bean Bean的完整生命週期可以認為是從容器建立初始化Bea ...
- spring(二、bean生命周期、用到的设计模式、常用注解)
spring(二.bean生命周期.用到的设计模式.常用注解) Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的. ...
- spring bean 生命周期和 ? 作用域? spirng bean 相互依赖? jvm oom ? jvm 监控工具? ThreadLocal 原理
1. spring bean 生命周期 1. 实例化一个bean ,即new 2. 初始化bean 的属性 3. 如果实现接口 BeanNameAware ,调用 setBeanName 4. Bea ...
随机推荐
- 从windows到linux,图形化操作到命令行操作讲解
作为一个后端开发人员,刚开始进入到职场中,linux还不是必备项.但是随着开发经验的提升,慢慢就会接触到linux,所以就有了那句:开发必须要会linux.一开始我也不知道linux是干嘛的,学那些命 ...
- 通过HTML和JavaScript实现随机抽取幸运员工
需求描述: 公司经常会要求IT部门做一个随机抽取员工页面,今天我们通过HTML和JavaScript来实现 HTML 结构 首先,我们需要编写 HTML 代码来定义页面结构和元素.下面是 HTML 代 ...
- 【Unity】 ScriptableObject ——生成多个ScriptableObject作为子对象,可以点击展开并显示二级菜单
官方是这么介绍ScriptabelObject的: "ScriptableObject 是一个可独立于类实例来保存大量数据的数据容器.ScriptableObject 的一个主要用例是通过避 ...
- 看完包你搞懂Redis缓存穿透、击穿和雪崩!!!说到做到
缓存穿透 缓存穿透是指当用户对Redis发出无效或者不存在的数据信息操作时,这条数据在Redis中不存在,Redis就会在MySQL数据库中查询,可时无效的信息在mysql数据库中也不存在,就会造成R ...
- python3使用pymsql操作mysql数据库
操作系统 :Windows 10_x64 python版本 :3.9.2 pymysql版本: 1.0.2 MySQL版本: 5.7.38 之前写过一篇关于python操作mysql数据库的文章: ...
- GitHub 官方开源的字体集「GitHub 热点速览」
前几天 GitHub 官方一口气开源了 5 款字体,各有特色,彼此兼容,重要的是代码友好.这不,一开源就获得了 4.5k+ 的 star. 本周除了这个热点之外,当属 OpenAI 又有新动态了,你可 ...
- VUE同级组件之前方法调用
实现:Index.vue页面调用nav.vue页面里的getLeftMenu()方法 一.首先先建一个公共文件,命名eventBus.js,内空为: import Vue from 'vue'expo ...
- OPC 协议数据采集
kepserver OPC Connectivity Suite 让系统和应用程序工程师能够从单一应用程序中管理他们的 OPC 数据访问 (DA) 和 OPC 统一架构 (UA) 服务器.通过减少 ...
- 基于Qt的Live2D模型显示以及控制
基于Qt的Live2D模型显示以及控制 基本说明 Live2D官方提供有控制Live2D模型的SDK,而且还提供了一个基于OpenGL的C++项目Example,我们可以基于该项目改成Qt的项目,做一 ...
- LeetCode 503:下一个更大的元素|| (单调栈 or 线段树)
解题思路: 1.单调栈:因为是循环数组,因此把数组复制三遍,ans 数组复制为2倍长,维护一个单调非递增的栈,栈保存的元素是元组(a[i] , i ),如果后面的值有比栈顶元素的值大,栈顶元素出栈,更 ...