加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – playframework的全球范围在哪里以及它消失的好处是什么

发布时间:2020-12-16 18:31:24 所属栏目:安全 来源:网络整理
导读:我正在读取playframework正在删除旧版2.4.x版本中的全局状态. 有人可以解释目前全球状态在哪里以及消除全球状态有什么好处? 解决方法 什么是全球国家? 有一个对象play.api.Play与以下字段: @volatile private[play] var _currentApp: Application = _ 在
我正在读取playframework正在删除旧版2.4.x版本中的全局状态.

有人可以解释目前全球状态在哪里以及消除全球状态有什么好处?

解决方法

什么是全球国家?

有一个对象play.api.Play与以下字段:

@volatile private[play] var _currentApp: Application = _

在哪里使用?

每当你做Play.current时,你都会引用那个单一的可变全局字段.这在整个框架中用于访问以下内容:

> play.api.Play.configuration采用隐式应用程序
> play.api.libs.concurrent.Execution.defaultContext调用内部上下文,它使用当前运行的应用程序来获取actor系统
> play.api.libs.concurrent.Akka.system采用隐式应用程序
> play.api.libs.ws.WS.url采用隐式应用程序
>还有更多的地方..

为什么那么糟糕?

许多函数只是采用一个隐式应用程序,所以这不是真正的全局状态,对吧?我的意思是,你可以通过该应用程序.但是你从哪里得到它?通常,人们会导入play.api.Play.current.

另一个例子:假设您要开发一个调用Web服务的组件.这类的依赖是什么? WSClient.现在,如果你想获得一个实例,你需要调用play.api.libs.ws.WS.client并传入一个应用程序.因此,您在逻辑上仅依赖于Web服务客户端的漂亮小组件现在依赖于整个应用程序.

另一个重要因素和前一点的直接后果是测试.假设您要测试Web服务组件.从理论上讲,您只需要模拟(或提供一些虚拟实现)Web服务客户端.但是现在你的代码中的某个地方你正在调用play.api.Play.current,你需要确保在调用它时设置该字段.确保这一点的最简单方法是启动播放应用程序.因此,您只是为了测试您的小组件而启动整个应用程序.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读