singleton

单例Bean全局只有一个共享的实例,所有将单例Bean作为依赖的情况下,容器返回将是同一个实例。

换言之,当开发者定义一个Bean的作用域为单例时,Swoft IOC容器只会根据Bean定义来创建该Bean的唯一实例。这些唯一的实例会缓存到容器中,后续针对单例Bean的请求和引用,都会从这个缓存中拿到这个唯一的实例。

简介

singletonbean 会在框架启动时被初始化,并且只会初始化一次。 对singletonbean 进行写入操作是不安全的。如果同时读写singletonbean,会造成上下文切换导致bean数据不一致,这种往往是业务交叉造成的。。

特别注意

singleton 一般用于只读, 不要把它当做共享内存的方式。

例如 swoftconfig 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 只会在 主进程关闭 才会被销毁。

/docs/2.x/zh-CN/bean/singleton.html
progress-bar