Beim Studium von JSR-299 habe ich den Abschnitt 5.1 der Schweißreferenz , die erklärt, wie Scopes in CDI funktioniert. Offensichtlich ist Kontext ein Konzept, das eng mit dem Umfang verbunden ist. Ich habe ein wenig verstanden, was jeder ist, aber es ist nicht sehr klar in meinen Gedanken getrennt und ich bin versucht, die Wörter sogar austauschbar zu benutzen.
Was ist der Unterschied zwischen Umfang und Kontext? Was ist die Beziehung zwischen den beiden Konzepten?
Ich erwarte eine Antwort in der CDI-Domäne, aber ich habe Zweifel an Java im Allgemeinen, da die Konzepte auch in anderen Kontexten verwendet werden. Eigentlich würde eine Antwort, die die Konzepte im Kontext von CDI, Java und im Allgemeinen erklärt, mehr Punkte bekommen - wenn ich sie geben könnte.
Jeder Bereich hat einen separaten Kontext.
Der Kontext ist ein Container für Beans, die mit dem jeweiligen Bereich definiert wurden.
Aus diesem Grund tragen Kontextimplementierungen den Namen des Bereichs - ApplicationContext
, DependentContext
, RequestContext
usw.
Das ist eigentlich ein Implementierungsdetail - als Benutzer von CDI sollten Sie nur über Bereiche Bescheid wissen (weil Sie es für Ihre Beans definieren), und die Implementierung entscheidet, wo diese Beans platziert und wie ihr Lebenszyklus verwaltet wird.
>Nach meinem Verständnis bezieht sich der Gültigkeitsbereich darauf, woher auf ein Objekt zugegriffen werden kann, während der Kontext die Objekte aufzählt, auf die von einem bestimmten Punkt der Programmausführung zugegriffen werden kann. (Das heißt, wir sprechen über den Umfang eines Objekts und den Kontext an einem bestimmten Punkt in der Programmausführung.)
Mathematisch gesprochen beschreiben beide die Can-Access-Relation, aber betrachten sie in verschiedene Richtungen.
Erstens haben wir Konzepte in unseren Köpfen wie Anwendungen, Sitzungen, Anfragen. Lassen Sie uns das Sitzungskonzept in den folgenden Beispielen verwenden.
Wenn wir der Ansicht sind, dass ein Teil der Ausführung für eine bestimmte Sitzung dient, sagen wir, dass die Sitzung Teil des Ausführungskontexts ist; oder es ist der Sitzungskontext der Ausführung.
Eine Sitzung hat einige Variablen, z.B. %Code%; Wir sagen, die Sitzung ist der Bereich dieser Variablen.
Da beide auf dieselbe Sitzung zeigen, kann es verwirrend werden. Zum Beispiel
%Vor%klingen beide gut, weil wir über eine Ausführung auf einer Variablen sprechen.
Das folgende Beispiel ist für die Definition von scope
verständlich %Vor%Aber wir haben kein Problem zu verstehen, was wirklich vor sich geht. Wenn wir es wollen, können wir es erweitern, bis es auf grundlegenden Gebräuchen von Wörtern basiert; wir tun das nicht, weil es sehr ausführlich sein wird.
Ein Autor steht vor der schwierigen Aufgabe, die Wörter prägnant zu packen, aber dennoch zu erwarten, dass die Leser die komplexe Bedeutung irgendwie verstehen. Texte über Kontext und Umfang erscheinen für diejenigen, die die Konzepte nicht verstanden haben, meist Kauderwelsch.
API-Namen sind noch schwieriger zu finden, weil Codes keine englischen Sätze sind. userName
oder Context
sind ziemlich austauschbar. Wenn nur ein Objekt eine Sitzung repräsentiert, sollte die Klasse wahrscheinlich nur mit Scope
benannt werden. Wenn wir den Teil über die Variablenmanipulation aufteilen, kann dieser Teil Session
heißen. Die Bedeutung von SessionScope
ist jedoch zu schwer zu erkennen, das Beste, was wir an dem Namen erkennen können, ist, dass es sich um etwas wie eine Session handelt - "Kontext" ist hier eher ein Kraftausdruck.