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)一般的组件

  1. @Component
  2. public class DemoCom{
  3. }

b)实现 InitializingBean 接口的组件

  1. @Component
  2. public class DemoCom implements InitializingBean{
  3. @Override
  4. public void afterInjection(){
  5. //当所有字段完成注入后,才会执行(如果有字段一直未注入,则函数不会被触发)
  6. }
  7. }

c)实现 LifecycleBean 接口的组件

这个接口,只对单例有效。非单例,仅扫描时产生的实例会被纳管。其它实例的生命周期要自己处理。

  1. @Component
  2. public class DemoCom implements LifecycleBean{
  3. @Override
  4. public void afterInjection(){
  5. //当所有字段完成注入后,才会执行(如果有字段一直未注入,则函数不会被触发)
  6. }
  7. @Override
  8. public void start(){
  9. //在 AopContext:start() 时被调用。此时所有bean扫描已完成,订阅注入已完成
  10. }
  11. @Override
  12. public void stop(){
  13. //在 AopContext:stop() 时被调用。一般做些释放或停止类的工作
  14. }
  15. }

d)带 @Init 注解的组件

@Init 注解函数,与 LifecycleBean::start() 时机点相同。

  1. @Component
  2. public class DemoCom{
  3. @Init
  4. public void init(){
  5. //在 AopContext:start() 时被调用。此时所有bean扫描已完成,订阅注入已完成
  6. }
  7. }

Solon2 的 Bean 生命周期的更多相关文章

  1. Spring之BeanFactory及Bean生命周期

    1.spring通过BeanFactory灵活配置.管理bean,Spring对管理的bean没有任何特别的要求,完全支持对POJO的管理: 2.BeanFactory有个ApplicationCon ...

  2. Bean生命周期及BeanFactory

    1.spring通过BeanFactory灵活配置.管理bean,Spring对管理的bean没有任何特别的要求,完全支持对POJO的管理: 2.BeanFactory有个ApplicationCon ...

  3. Spring Bean配置默认为单实例 pring Bean生命周期

    Bean默认的是单例的. 如果不想单例需要如下配置:<bean id="user" class="..." scope="singleton&q ...

  4. Spring Bean 生命周期2

    在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean的别名只能维持一个实例,而不是每次都产生一个新的对象使用Sin ...

  5. Spring bean 生命周期验证

    一.从源码注释看bean生命周期 从JDK源码上看,BeanFactory实现类需要支持Bean的完整生命周期,完整的初始化方法及其标准顺序(格式:接口 方法)为: 1.BeanNameAware s ...

  6. Spring:Bean生命周期

    关于Bean生命周期,我在网上找了两张图: 图1: 图2: 总结起来就是: Bean构建: Bean对象创建 > @Autowired | @Resource> @PostConstruc ...

  7. Spring事务,Bean生命周期

    一.事务相关: 1.Spring事务基于Spring AOP切面编程: 2.AOP基于代理模式,得到需要开启事务的代码的代理对象: 3.而没有开启事务的Service方法里调用了开启事务 @Trans ...

  8. 【不懂】spring bean生命周期

    完整的生命周期(牢记): 1.spring容器准备 2.实例化bean 3.注入依赖关系 4.初始化bean 5.使用bean 6.销毁bean Bean的完整生命週期可以認為是從容器建立初始化Bea ...

  9. spring(二、bean生命周期、用到的设计模式、常用注解)

    spring(二.bean生命周期.用到的设计模式.常用注解) Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的. ...

  10. spring bean 生命周期和 ? 作用域? spirng bean 相互依赖? jvm oom ? jvm 监控工具? ThreadLocal 原理

    1. spring bean 生命周期 1. 实例化一个bean ,即new 2. 初始化bean 的属性 3. 如果实现接口 BeanNameAware ,调用 setBeanName 4. Bea ...

随机推荐

  1. JVM指令分析

    代码: 1 public class AppGo{ 2 public static void test() { 3 boolean flag = true; 4 if (flag) System.ou ...

  2. 一文彻底看懂Python切片

    1.什么是切片 切片是Python中一种用于操作序列类型(如列表.字符串和元组)的方法.它通过指定起始索引和结束索引来截取出序列的一部分,形成一个新的序列.切片是访问特定范围内的元素,就是一个Area ...

  3. [GitOps] 白嫖神器Github Actions,构建、推送Docker镜像一路畅通无阻

    [GitOps] 白嫖神器Github Actions,构建.推送Docker镜像一路畅通无阻 引言   当你没找到合适的基础的Docker镜像时,是否会一时冲动,想去自己构建.然而因为网络问题,各种 ...

  4. 神经网络入门篇:详解搭建神经网络块(Building blocks of deep neural networks)

    搭建神经网络块 这是一个层数较少的神经网络,选择其中一层(方框部分),从这一层的计算着手.在第\(l\)层有参数\(W^{[l]}\)和\(b^{[l]}\),正向传播里有输入的激活函数,输入是前一层 ...

  5. verdi的rc文件

    Verdi波形定位信号,将每次定位看的信号保存下来,存做rc文件,下次使用时直接打开就出来.不用再一个一个找信号. 原文 https://blog.csdn.net/sinat_43629962/ar ...

  6. [c/c++][考研复习笔记]内部排序篇学习笔记

    考研排序复习笔记 插入排序 #include<stdio.h> #include<stdlib.h> #define MaxSize 9 //折半插入排序 void ZBIns ...

  7. 【YOLOv5】实现扑克牌的点数识别

    前言 其实年初的时候,我也跟着别人的源码,用 Tensoflow 实现过扑克牌的目标检测.虽然也通过博文的方式记录了,但是那个项目使用的 TF 版本比较旧,自身对 TF 并不熟.后期如果说要升级或修改 ...

  8. YOLO: Real-Time Object Detection 遇到的问题

    YOLO: Real-Time Object Detection 官方介绍的方法安装好了yolo之后,然后使用命令: ./darknet detect cfg/yolov3.cfg yolov3.we ...

  9. 一文讲透消息队列RocketMQ实现消费幂等

    这篇文章,我们聊聊消息队列中非常重要的最佳实践之一:消费幂等. 1 基础概念 消费幂等是指:当出现 RocketMQ 消费者对某条消息重复消费的情况时,重复消费的结果与消费一次的结果是相同的,并且多次 ...

  10. Scrapy-redis组件,实现分布式爬虫

    安装包 pip install -U scrapy-redis settings.py ##### Scrapy-Redis ##### ### Scrapy指定Redis 配置 ### # 其他默认 ...