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 生命周期的更多相关文章

  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. 从windows到linux,图形化操作到命令行操作讲解

    作为一个后端开发人员,刚开始进入到职场中,linux还不是必备项.但是随着开发经验的提升,慢慢就会接触到linux,所以就有了那句:开发必须要会linux.一开始我也不知道linux是干嘛的,学那些命 ...

  2. 通过HTML和JavaScript实现随机抽取幸运员工

    需求描述: 公司经常会要求IT部门做一个随机抽取员工页面,今天我们通过HTML和JavaScript来实现 HTML 结构 首先,我们需要编写 HTML 代码来定义页面结构和元素.下面是 HTML 代 ...

  3. 【Unity】 ScriptableObject ——生成多个ScriptableObject作为子对象,可以点击展开并显示二级菜单

    官方是这么介绍ScriptabelObject的: "ScriptableObject 是一个可独立于类实例来保存大量数据的数据容器.ScriptableObject 的一个主要用例是通过避 ...

  4. 看完包你搞懂Redis缓存穿透、击穿和雪崩!!!说到做到

    缓存穿透 缓存穿透是指当用户对Redis发出无效或者不存在的数据信息操作时,这条数据在Redis中不存在,Redis就会在MySQL数据库中查询,可时无效的信息在mysql数据库中也不存在,就会造成R ...

  5. python3使用pymsql操作mysql数据库

    操作系统 :Windows 10_x64 python版本 :3.9.2 pymysql版本: 1.0.2 MySQL版本: 5.7.38   之前写过一篇关于python操作mysql数据库的文章: ...

  6. GitHub 官方开源的字体集「GitHub 热点速览」

    前几天 GitHub 官方一口气开源了 5 款字体,各有特色,彼此兼容,重要的是代码友好.这不,一开源就获得了 4.5k+ 的 star. 本周除了这个热点之外,当属 OpenAI 又有新动态了,你可 ...

  7. VUE同级组件之前方法调用

    实现:Index.vue页面调用nav.vue页面里的getLeftMenu()方法 一.首先先建一个公共文件,命名eventBus.js,内空为: import Vue from 'vue'expo ...

  8. OPC 协议数据采集

    kepserver   OPC Connectivity Suite 让系统和应用程序工程师能够从单一应用程序中管理他们的 OPC 数据访问 (DA) 和 OPC 统一架构 (UA) 服务器.通过减少 ...

  9. 基于Qt的Live2D模型显示以及控制

    基于Qt的Live2D模型显示以及控制 基本说明 Live2D官方提供有控制Live2D模型的SDK,而且还提供了一个基于OpenGL的C++项目Example,我们可以基于该项目改成Qt的项目,做一 ...

  10. LeetCode 503:下一个更大的元素|| (单调栈 or 线段树)

    解题思路: 1.单调栈:因为是循环数组,因此把数组复制三遍,ans 数组复制为2倍长,维护一个单调非递增的栈,栈保存的元素是元组(a[i] , i ),如果后面的值有比栈顶元素的值大,栈顶元素出栈,更 ...