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 ...
随机推荐
- Go语言基准测试(benchmark)三部曲之一:基础篇
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 关于基准测试(benchmark) Go的标准库内置的 ...
- CSS 也能实现 if 判断?实现动态高度下的不同样式展现
最近在群里,有个小伙伴问了这么一道很有趣的问题: CSS 能否实现,容器再某个高度下是某种表现,一旦超出某个高度,则额外展示另外一些内容 为了简化实际效果,我们看这么一张示意效果图: 可以看到,当容器 ...
- 01Java学习_概述
概述 目录 概述 三个阶段 概述 历史(了解) Java 重要特点 开发工具 Java 运行机制及运行过程 下载和安装 JDK 配置环境变量 java 快速入门 博客中的图片内容全部采用 github ...
- Linux socket API
socket是进程通信机制的一种,与PIPE.FIFO不同的是,socket即可以在同一台主机通信(unix domain),也可以通过网络在不同主机上的进程间通信(如:ipv4.ipv6),例如因特 ...
- python之封装及私有方法
目录 封装 简洁 私有方法 封装:提高程序的安全性 将属性和方法包装到类对象中,在方法内部对属性进行操作,在类对象外部调用方法,使得程序更加简洁 在python中,如果该属性不希望在类对象外部被访问, ...
- Kubernetes 漫游:etcd
概述 etcd 是一个基于 Raft 协议实现.开源的.分布式的键值存储系统.主要用于在分布式系统中提供强一致性和高可用性的数据存储. etcd 在 Kubernetes 中的作用如下: 集群状态数据 ...
- MySQL运行在docker容器中会损失多少性能
前言 自从使用docker以来,就经常听说MySQL数据库最好别运行在容器中,性能会损失很多.一些之前没使用过容器的同事,对数据库运行在容器中也是忌讳莫深,甚至只要数据库跑在容器中出现性能问题时,首先 ...
- java当中组件和窗口的相容问题(里面包含了这些方法的作用)
窗口也称为容器,在书中大部分称为容器,这里主要讲的是底层容器. JFrame():创建一个无标签的窗口. JFrame(String s):创建标题为s的窗口 setBounds(int a,int ...
- [USACO2007NOVG] Telephone Wire G
题目描述 Farmer John's cows are getting restless about their poor telephone service; they want FJ to rep ...
- 【Postman&JMeter】使用Postman和JMeter进行signature签名
使用Postman和JMeter进行signature签名 目录 使用Postman和JMeter进行signature签名 一.前言 二.v0接口 1.Postman 2.JMeter 三.v1接口 ...