Swoft - Bean

一、Bean

在 Swoft 中,一个 Bean 就是一个类的一个对象实例。 它(Bean)是通过容器来存放和管理整个生命周期的。

最直观的感受就是省去了频繁new的过程,节省了资源的开销。

二、Bean的使用

1、创建Bean

在【gateway/app/Http/Controller】下新建一个名为【TestController.php】的文件,文件内容如下。注释:“gateway”为我的项目名称。

<?php declare(strict_types=1);
/*** This file is part of Swoft.** @link     https://swoft.org* @document https://swoft.org/docs* @contact  group@swoft.org* @license  https://github.com/swoft-cloud/swoft/blob/master/LICENSE*/namespace App\Http\Controller;use Swoft\Http\Server\Annotation\Mapping\RequestMapping;
use Swoft\Bean\Annotation\Mapping\Bean;/*** Class TestController** @since 2.0* @Bean()*/
class TestController
{/*** @RequestMapping("index")**/public function index(){return 'testBean';}
}

2、调用Bean

在【gateway/app/Http/Controller】目录下随便找个已近存在的文件进行编辑调用,本文就选择了【RpcController.php】文件,这个文件在项目创建之初就存在了。

<?php declare(strict_types=1);
/*** This file is part of Swoft.** @link     https://swoft.org* @document https://swoft.org/docs* @contact  group@swoft.org* @license  https://github.com/swoft-cloud/swoft/blob/master/LICENSE*/namespace App\Http\Controller;use Swoft\Bean\BeanFactory;
use Swoft\Http\Server\Annotation\Mapping\Controller;
use Swoft\Http\Server\Annotation\Mapping\RequestMapping;/*** Class RpcController** @since 2.0** @Controller()*/
class RpcController
{/*** @RequestMapping("list")* @return array*/public function getList(): array{$bean = BeanFactory::getBean(TestController::class);return [$bean->index()];}}

3、展示结果

在【TestController】文件中的【index】方法中返回的内容是“testBean“,调用的时候返回了一个数组。我的浏览器安装了JSON的格式化工具,所以返回的数据都格式化了。

4、说明

在上面两个文件中都有标红的地方,两个文件的标红处是有关联的。

1、在【TestController】文件中,Bean的写法有很多种,如下所示:

  • 第一种
    •   写法:@Bean()
    •   调用:BeanFactory::getBean(TestController::class);
  • 第二种
    •   写法:@Bean("testBean")
    •   调用:BeanFactory::getBean('testBean');
    •   注意点:@Bean("testBean")中的引号一定要双引号,单引号要报错。
  • 第三种
    •   写法:@Bean(name="testBean",scope=Bean::SINGLETON)
    •   调用:BeanFactory::getBean('testBean');
    •   注意点:scope=Bean::SINGLETON 中的scope有三个值,分别是 Bean::SINGLETON(默认), Bean::PROTOTYPE, Bean::REQUEST。
  • 第四种
    •   写法:@Bean(name="testBean",scope=Bean::SINGLETON,alias="testBeanAlias")
    •   调用:BeanFactory::getBean('testBeanAlias');
    •   注意点:alias 表示别名的意思,使用了 alias 那么在调用时可以用别名调用。当然,设置别名后也可以不用别名调用,还是用原来的name也是可以的。

2、关于Bean的源码,可以打开【gateway/vendor/swoft/bean/src/Annotation/Mapping/Bean.php】文件查看。我下载的Swoft版本是2.0的,Bean.php文件内容如下:

<?php declare(strict_types=1);
/*** This file is part of Swoft.** @link     https://swoft.org* @document https://swoft.org/docs* @contact  group@swoft.org* @license  https://github.com/swoft-cloud/swoft/blob/master/LICENSE*/namespace Swoft\Bean\Annotation\Mapping;use Doctrine\Common\Annotations\Annotation\Attribute;
use Doctrine\Common\Annotations\Annotation\Attributes;
use Doctrine\Common\Annotations\Annotation\Enum;
use Doctrine\Common\Annotations\Annotation\Target;/*** Class Bean** @Annotation* @Target("CLASS")* @Attributes({*     @Attribute("name", type="string"),*     @Attribute("scope", type="string"),*     @Attribute("alias", type="string"),* })** @since 2.0*/
final class Bean
{/*** Singleton bean*/public const SINGLETON = 'singleton';/*** New bean*/public const PROTOTYPE = 'prototype';/*** New bean from every request*/public const REQUEST = 'request';/*** New bean for one session*/public const SESSION = 'session';/*** Bean name** @var string*/private $name = '';/*** Bean scope** @var string* @Enum({Bean::SINGLETON, Bean::PROTOTYPE, Bean::REQUEST})*/private $scope = self::SINGLETON;/*** Bean alias** @var string*/private $alias = '';/*** Bean constructor.** @param array $values*/public function __construct(array $values){if (isset($values['value'])) {$this->name = $values['value'];}if (isset($values['name'])) {$this->name = $values['name'];}if (isset($values['scope'])) {$this->scope = $values['scope'];}if (isset($values['alias'])) {$this->alias = $values['alias'];}}/*** @return string*/public function getName(): string{return $this->name;}/*** @return string*/public function getScope(): string{return $this->scope;}/*** @return string*/public function getAlias(): string{return $this->alias;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/616277.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7.vue学习笔记(模板引用+组件组成+组件嵌套关系)

文章目录 1.模板引用2.组件组成3.组件嵌套关系3.1.App.vue3.1.1.Header.vue3.1.2.Main.vue3.1.3.Aside.vue 1.模板引用 在Vue直接读取DOM 虽然Vue的声明性渲染模型为你抽象了大部分对DOM的直接操作&#xff08;事件&#xff0c;内容&#xff0c;属性&#xff09;&#xff0c; …

持久双向通信网络协议-WebSocket-入门案例实现demo

1 介绍 WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手&#xff0c;两者之间就可以创建持久性的连接&#xff0c; 并进行双向数据传输。 HTTP协议和WebSocket协议对比&#xff1a; HTTP是短连接&#xff0…

Edge 浏览器设置自动刷新

要在 Microsoft Edge 浏览器中设置自动刷新&#xff0c;您可以使用第三方扩展来实现这一功能。目前&#xff0c;Edge 浏览器本身并没有内置的自动刷新功能。以下是启用自动刷新的一般步骤&#xff1a; 打开 Microsoft Edge 扩展商店&#xff1a;首先&#xff0c;在 Edge 浏览器…

【MATLAB】小波_LSTM神经网络时序预测算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 小波-LSTM神经网络时序预测算法是一种结合了小波变换和长短期记忆神经网络&#xff08;LSTM&#xff09;的时间序列预测方法。 小波变换是一种信号处理方法&#xff0c;能够将信号分解为…

Postman应用打开超级慢解决办法

电脑系统环境变量增加 POSTMAN_DISABLE_GPUtrue 电脑系统环境变量增加 POSTMAN_DISABLE_GPUtrue 电脑系统环境变量增加 POSTMAN_DISABLE_GPUtrue 电脑系统环境变量增加 POSTMAN_DISABLE_GPUtrue 电脑系统环境变量增加 POSTMAN_DISABLE_GPUtrue 电脑系统环境变量增加 POSTMAN_DI…

<蓝桥杯软件赛>零基础备赛20周--第14周--BFS

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 每周发1个博客&#xff0c;共20周。 在QQ群上交流答疑&am…

发布_Windows系统服务器发布Java程序

windows服务器发布Java程序 一般来说再Windows服务器上发布就直接使用cmd&#xff0c;然后使用javaw -jar ****.jar但是使用这种方法有两种环境同时再此服务器上时&#xff08;生产环境和测试环境&#xff09;&#xff0c;直接再任务管理器中杀死javaw进程就会混乱&#xff0c…

【嵌入式——C++】基础知识

【嵌入式——C】基础知识 变量作用域局部作用域全局作用域块作用域类作用域 常量标识符命名规则数据的输入运算符算术运算符赋值运算符比较运算符逻辑运算符 变量作用域 局部作用域 在函数内部声明的变量具有局部作用域&#xff0c;它们只能在函数内部访问。局部变量在函数每…

2085. 统计出现过一次的公共字符串

提示 给你两个字符串数组 words1 和 words2 &#xff0c;请你返回在两个字符串数组中 都恰好出现一次 的字符串的数目。 示例 1&#xff1a; 输入&#xff1a;words1 ["leetcode","is","amazing","as","is"], words2 [&qu…

NowinAndroid—2024 Android现代开发全功能应用

NowinAndroid—2024 Android现代开发全功能应用 现代Android开发全功能示例应用Now-in-Android&#xff0c;它是用Kotlin和Jetpack Compose开发的&#xff0c;功能非常强大。这个应用遵循了安卓设计和开发的最佳方法&#xff0c;旨在给开发者提供实用的参考资料。无论你是新手…

2024年甘肃省职业院校技能大赛信息安全管理与评估 样题一 模块一

竞赛需要完成三个阶段的任务&#xff0c;分别完成三个模块&#xff0c;总分共计 1000分。三个模块内容和分值分别是&#xff1a; 1.第一阶段&#xff1a;模块一 网络平台搭建与设备安全防护&#xff08;180 分钟&#xff0c;300 分&#xff09;。 2.第二阶段&#xff1a;模块二…

002 Golang-channel-practice

第二题&#xff1a; 创建一个生产器和接收器&#xff0c;再建立一个无缓冲的channel。生产器负责把数据放进管道里&#xff0c;接收器负责把管道里面的数据打印出来。这里我们开5个协程把数据打印出来。 直接上代码&#xff01; package mainimport ("fmt" )func …

个人猜测:关于《矩阵论》中的QR分解为什么用Q来表示正交矩阵(orthogonal matrix )

为什么QR分解用Q来表示正交矩阵&#xff08;orthogonal matrix &#xff09;&#xff1f; 搜过Google&#xff0c;问过ChatGPT&#xff0c; 什么说是约定俗成&#xff0c;什么说是历史原因&#xff0c;都没有一个合理的解释。 都没有准确的答案&#xff0c; 下面这两个链接…

“人工智能”领域的高含金量证书接受报名!

由国家工信部权威认证的人工智能证书是跨入人工智能行业的敲门砖&#xff0c;随着人工智能技术的发展越来越成熟&#xff0c;相关的从业人员也会剧增&#xff0c;证书的考取难度也会变高。如果已经从事或者准备从事人工智能行业的人员&#xff0c;对于考证宜早不宜迟&#xff0…

作业--day43

使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数&#xff0c;将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c…

windows系统Mysql备份脚本

一.背景 用的windows server 2019服务器&#xff0c;mysql8.0.34&#xff0c;还是应该每天备份一下。以前做了很多次&#xff0c;主要是带了2个徒弟&#xff0c;还是要写出来。 二.备份脚本 chcp 936 set date_tmp%date:~0,10% set datetime%date_tmp:/%%time:~0,2%%time:~3,…

git常用命令及概念对比

查看日志 git config --list 查看git的配置 git status 查看暂存区和工作区的变化内容&#xff08;查看工作区和暂存区有哪些修改&#xff09; git log 查看当前分支的commit 记录 git log -p commitID详细查看commitID的具体内容 git log -L :funcName:fileName 查看file…

验证Lettuce在单连接上进行多路复用

文章目录 配置 RedisTemplate验证blocking操作在独立连接上进行验证单tcp连接的多路复用 redis multiplexing机制类似http2&#xff0c;在存在并发请求时能减少大量通讯延迟&#xff0c;但不支持blocking相关的操作&#xff0c;如BLPOP 配置 RedisTemplate RedisTemplate自动…

Springboot注解@EnableConfigurationProperties和@ConfigurationProperties关系和作用

目录 EnableConfigurationProperties和ConfigurationProperties关系是什么&#xff1f; 简介 ConfigurationProperties EnableConfigurationProperties 二者之间的联系 总结 EnableConfigurationProperties和ConfigurationProperties关系是什么&#xff1f; 其实我能明白…

利用矩阵特征值解决微分方程【1】

目录 一. 特征值介绍 二. 单变量常微分方程 三. 利用矩阵解决微分方程问题 四. 小结 4.1 矩阵论 4.2 特征值与特征向量内涵 4.3 应用 一. 特征值介绍 线性代数有两大基础问题&#xff1a; 如果A为对角阵的话&#xff0c;那么问题就很好解决。需要注意的是&#xff0c;矩…