簡體   English   中英

CDI 中的 context 和 scope 和 Java 之間的區別

[英]The difference between context and scope in CDI - and Java at all

在學習 JSR-299 時,我閱讀了Weld 參考的第 5.1 節,其中解釋了作用域在 CDI 中的工作原理。 顯然,上下文是一個與 scope 密切相關的概念。 我對每一個是什么有了一些了解,但在我的腦海中並沒有很清楚地分開,我什至想互換使用這些詞。

scope 和上下文有什么區別? 這兩個概念之間有什么關系?

我希望在 CDI 領域得到答案,但總的來說我對 Java 有疑問,因為這些概念也用於其他上下文。 實際上,在 CDI、Java一般情況下解釋概念的答案會得到更多的分數——如果我能給他們的話。

每個 scope 都有一個單獨的上下文。

上下文是 bean 的容器,已使用相應的 scope 定義。

這就是上下文實現帶有 scope 名稱的原因 - ApplicationContextDependentContextRequestContext等。

這實際上是一個實現細節——作為 CDI 的用戶,您應該只知道范圍(因為您為您的 bean 定義了它),並且實現決定將這些 bean 放置在哪里以及如何管理它們的生命周期。

我的理解是 scope 是指 object 可以從哪里訪問,而上下文枚舉可以從程序執行中的某個特定點訪問的對象。 (也就是說,我們討論的是 object 的 scope,以及程序執行中某個特定點的上下文。)

從數學上講,兩者都描述了可以訪問的關系,但從不同的方向來看。

首先,我們腦子里有一些概念,比如應用程序、會話、請求。 讓我們在以下示例中使用 session 概念。

如果我們認為一段執行服務於特定的 session,我們會說 session 是執行上下文的一部分; 或者,它是執行session 上下文。

session 有一些變量,例如userName 我們會說 session 是這些變量的 scope。

由於兩者都指向同一個 session,因此可能會令人困惑。 例如,

get the userName from the session context
get the userName from the session scope

兩者聽起來都不錯,因為我們正在談論對變量的執行。

根據 scope 的定義,下面的例子是可以理解的

the scope of the injected bean is Session

但我們沒有問題理解真正發生的事情。 如果我們願意,我們可以擴展它,直到它基於單詞的基本用法; 我們不這樣做,因為它會非常冗長。

作者面臨着將文字簡潔地包裝起來但又希望讀者以某種方式理解復雜含義的艱巨任務。 對於那些不理解這些概念的人來說,關於上下文和 scope 的文本通常看起來是胡言亂語。

API的名字就更難想出來了,因為代碼不是英文句子。 ContextScope幾乎可以互換。 如果只有一個 object 代表 session,則 class 可能應該命名為Session 如果我們拆分關於變量操作的部分,那部分可以稱為SessionScope 但是, SessionContext的含義太難以捉摸了,僅從名稱上我們就可以看出它是關於 session 的東西——這里的“上下文”幾乎是一種咒罵。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM