gpt4 book ai didi

java - RAP 应用程序单例

转载 作者:行者123 更新时间:2023-11-30 06:51:24 25 4
gpt4 key购买 nike

所以,我一直在阅读有关 RAP 应用程序的内容,并且我不停地想知道如何仅为当前 session 创建静态变量(以防多个人同时访问该应用程序)。我读过有关 SingletonUtil 的内容。不过,我对此有几个疑问。

1- 我应该为应用程序创建一个 SessionSingleton 吗?或者我应该为应用程序中的每个类创建一个 SessionSingleton(我知道这听起来很愚蠢,我可能应该为应用程序创建一个 SessionSingleton,但是......只是确保)。

2-一旦我创建了这个单例,每个用户(或 session )将只能访问他们的静态字段,对吗?确认他们不会从不同 session 的其他静态字段获取数据是正确的吗? (假设我正在创建一个购物车。如果客户可以从另一个 session 中看到购物车,则不可能这样做)。

最佳答案

重申一下Timothy Truckle说过,你应该尽可能远离单例。

在 Web 应用程序中,静态字段隐式具有应用程序范围,因为每个 Web 应用程序都通过单独的类加载器与其他应用程序隔离。也就是说,您的示例购物车将在同一 Web 应用程序的所有 session /用户之间共享。这通常不是您想要的。

要为每个 session 提供购物车,您可以使用SingletonUtil

要么这样

SoppingCart cart = SingletonUtil.getSessionInstance( ShoppingCart.class );

SoppingCart cart = SingletonUtil.getUniqueInstance( ShoppingCart.class, session );

第一个变体使用当前 UI session - 分配给当前正在执行的请求线程的 session 。

第二个变体要求您提供应获取/创建单例的 UI session 。例如,如果您要从 UI session 启动的后台线程运行代码,请使用此选项。

UISession session = RWT.getUISession( display );

Thread thread = new Thread( this::calcualteItemsInShoppingCart );
thread.start();

void calculateItemsInShopingCart() {
SoppingCart cart = SingletonUtil.getUniqueInstance( ShoppingCart.class, session );
// use cart...
}

一般来说,使用( session /应用程序)单例仅作为最后的手段。他们迟早会成为负担。努力设计您的代码,以便您可以创建购物车或入口点中的示例,并将其传递到需要访问它的代码部分。

请注意,在 RAP 中,每个 servlet session 可能有多个 UI session (每个浏览器窗口/选项卡一个)。

另请参阅Singletons and Static Fields in RAP RAP 文档的章节。

这能回答你的问题吗?

关于java - RAP 应用程序单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42704181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com