- singleton
- 简介
- 特别注意
- 定义
- 销毁
singleton
单例Bean全局只有一个共享的实例,所有将单例Bean作为依赖的情况下,容器返回将是同一个实例。
换言之,当开发者定义一个Bean的作用域为单例时,Swoft IOC容器只会根据Bean定义来创建该Bean的唯一实例。这些唯一的实例会缓存到容器中,后续针对单例Bean的请求和引用,都会从这个缓存中拿到这个唯一的实例。
简介
singleton的bean 会在框架启动时被初始化,并且只会初始化一次。
对singleton的 bean 进行写入操作是不安全的。如果同时读写singleton的 bean,会造成上下文切换导致bean数据不一致,这种往往是业务交叉造成的。。
特别注意
singleton 一般用于只读, 不要把它当做共享内存的方式。
例如 swoft 的 config bean,就是一个全局单例的。它只用于读取,在运行过程中不会发生改变。系统把config 写操作都抛出了异常。
定义
<?php declare(strict_types=1);namespace Swoft\Config;use Swoft\Bean\Annotation\Mapping\Bean;/*** Class Config** @Bean("config")** @since 2.0*/class Config{}
默认是 score 是全局单例的,创建单例的bean,你可以不用指定score。
销毁
singleton 类型的 bean 只会在 主进程关闭 才会被销毁。
