it-swarm.dev

فاصوليا الربيع

هل يمكن لأي شخص أن يشرح ماهية النطاقات في فاصوليا الربيع التي كنت أستخدمها دائمًا "النموذج الأولي" ولكن هل هناك معايير أخرى يمكنني وضعها بدلاً من ذلك؟

مثال على ما أتحدث عنه

<bean id="customerInfoController" class="com.action.Controller" scope="prototype">
    <property name="accountDao" ref="accountDao"/>
    <property name="utilityDao" ref="utilityDao"/>
    <property name="account_usageDao" ref="account_usageDao"/>  
</bean>
53
gcalex5

من المواصفات الربيع ، هناك خمسة أنواع من نطاقات الفول المدعومة:

1. المفرد (الافتراضي *)

يتم تحديد تعريف حبة واحدة لمثيل كائن واحد لكل حاوية Spring IoC.

2. النموذج

نطاق تعريف حبة واحدة إلى أي عدد من مثيلات الكائن.

3. طلب

نطاق تعريف حبة واحدة إلى دورة حياة طلب HTTP واحد ؛ هذا هو كل طلب HTTP سيكون له مثيل خاص به لفول تم إنشاؤه في الجزء الخلفي من تعريف واحد للحبة. صالحة فقط في سياق Spring ApplicationContext.

(4). جلسة

النطاق تعريف فاصوليا واحدة إلى دورة حياة جلسة HTTP. صالحة فقط في سياق Spring ApplicationContext.

5. الجلسة العالمية

يتم تحديد تعريف حبة واحدة لدورة حياة جلسة HTTP الشاملة. عادةً ما يكون صالحًا فقط عند استخدامه في سياق المدخل. صالحة فقط في سياق Spring ApplicationContext.

* الافتراضي يعني عندما لا يتم توفير نطاق صراحة في <bean /> العلامة. اقرأ المزيد عنها هنا: http://static.springsource.org/spring/docs/3.0.0.M3/reference/html/ch04s04.html

82
Juned Ahsan

في Spring ، يتم استخدام نطاق الحبة لتحديد نوع مثيل الحبة الذي يجب إرجاعه من الحاوية Spring إلى المتصل.

ويدعم 5 أنواع من نطاقات الفول:

  1. Singleton: تقوم بإرجاع مثيل فاصوليا واحد لكل حاوية Spring IoC. يتم تخزين هذا المثيل المفرد في ذاكرة التخزين المؤقت لفول مثل هذه المفردات ، وجميع الطلبات والمراجع اللاحقة لذلك الفاصوليا المسماة ترجع الكائن المخزن مؤقتًا. يتم تحديد نطاق الحبة في ملف تكوين الحبة ، افتراضي إلى المفرد.

  2. Prototype: تقوم بإرجاع مثيل حبة جديد في كل مرة عند الطلب. لا تخزن أي نسخة مخبأة مثل المفرد.

  3. طلب: تقوم بإرجاع مثيل حبة واحد لكل طلب HTTP.

  4. الجلسة: تقوم بإرجاع نسخة واحدة من الحبة الواحدة لكل جلسة HTTP (جلسة مستوى المستخدم).

  5. GlobalSession: تقوم بإرجاع مثيل حبة واحدة لكل جلسة HTTP عمومية. إنه صالح فقط في سياق Spring ApplicationContext (جلسة مستوى التطبيق) على الويب.

في معظم الحالات ، يمكنك فقط التعامل مع النطاق الأساسي لـ Spring - singleton و prototype ، والنطاق الافتراضي هو singleton.

23
Divyesh Kanzariya

فقط تريد التحديث ، ذلك في Spring 5 ، كما هو مذكور في Spring docs ، Spring يدعم 6 نطاقات ، أربعة منها متوفرة فقط إذا كنت تستخدم ApplicationContext على الويب.

singleton (افتراضي) نطاق تعريف حبة واحدة لمثيل كائن واحد في حاوية Spring IoC.

النموذج الأولي النطاق تعريف فاصوليا واحد إلى أي عدد من الحالات الكائن.

request النطاق تعريف فاصوليا واحد لدورة حياة طلب HTTP واحد ؛ أي أن لكل طلب HTTP مثيل خاص به لفول تم إنشاؤه في الجزء الخلفي من تعريف حبة واحدة. صالحة فقط في سياق Spring ApplicationContext.

session نطاق تعريف حبة واحدة إلى دورة حياة جلسة HTTP. صالحة فقط في سياق Spring ApplicationContext.

application نطاق تعريف واحد للفاصوليا إلى دورة حياة ServletContext. صالحة فقط في سياق Spring ApplicationContext.

websocket النطاق تعريف فاصوليا واحد إلى دورة حياة WebSocket. صالحة فقط في سياق Spring ApplicationContext.

9
heyjr

يصف وثائق الربيعالنطاقات القياسية التالية :

singleton : (افتراضي) يقوم بتعريف تعريف حبة واحدة لمثيل كائن واحد في حاوية Spring IoC.

النموذج الأولي : النطاق تعريف فاصوليا واحد إلى أي عدد من الحالات الكائن.

request : نطاق تعريف حبة واحدة إلى دورة حياة طلب HTTP واحد ؛ أي أن لكل طلب HTTP مثيل خاص به لفول تم إنشاؤه في الجزء الخلفي من تعريف حبة واحدة. صالحة فقط في سياق Spring ApplicationContext.

جلسة : نطاق تعريف حبة واحدة إلى دورة حياة جلسة HTTP. صالحة فقط في سياق Spring ApplicationContext.

جلسة عمومية : نطاق تعريف حبة واحدة إلى دورة حياة جلسة HTTP عمومية. عادةً ما يكون صالحًا فقط عند استخدامه في سياق المدخل. صالحة فقط في سياق Spring ApplicationContext.

يمكن أيضًا إنشاء نطاقات مخصصة إضافية وتكوينها باستخدام CustomScopeConfigurer. على سبيل المثال سيكون النطاق flow الذي يضيفه Spring Webflow.

بالمناسبة ، تجادل بأنك دائمًا ما تستخدم prototype ما أجده غريبًا. النطاق القياسي هو singleton وفي التطبيق الذي أطوره ، نادراً ما أحتاج إلى نطاق النموذج الأولي. ربما يجب عليك إلقاء نظرة على هذا.

5
LaurentG

يمكن العثور على شرح مفصل لكل نطاق هنا في نطاقات حبوب الربيع . أدناه هو ملخص

Singleton - (افتراضي) نطاق تعريف حبة واحدة لمثيل كائن واحد لكل حاوية Spring IoC.

النموذج الأولي - النطاق تعريف فاصوليا واحد إلى أي عدد من الحالات الكائن.

request - النطاق تعريف فاصوليا واحدة لدورة حياة طلب HTTP واحد ؛ أي أن لكل طلب HTTP مثيل خاص به لفول تم إنشاؤه في الجزء الخلفي من تعريف حبة واحدة. صالحة فقط في سياق Spring ApplicationContext.

session - نطاق تعريف حبة واحدة إلى دورة حياة جلسة HTTP. صالحة فقط في سياق Spring ApplicationContext.

جلسة عمومية - نطاق تعريف حبة واحدة إلى دورة حياة جلسة HTTP عمومية. عادةً ما يكون صالحًا فقط عند استخدامه في سياق المدخل. صالحة فقط في سياق Spring ApplicationContext.

5
Vikas V

حول النموذج (الفول):

يجب أن يقوم رمز العميل بتنظيف الكائنات ذات النطاق الأولي وإطلاق الموارد باهظة الثمن التي يحتفظ بها (برامج) النموذج الأولي. للحصول على الحاوية Spring لتحرير الموارد التي تحتفظ بها الفاصوليا ذات النطاق الأولي ، حاول استخدام معالج ما بعد الحبة المخصص ، والذي يشير إلى الفاصوليا التي تحتاج إلى التنظيف.

المرجع: https://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch04s04.html#beans-factory-scopes-prototype

0
emon

وفقًا لـ الوثائق of Spring-Cloud-Config هناك مجال إضافي واحد بجانب الخمسة الموجودة. أنه @RefreshScope.

هذا هو الوصف المختصر RefreshScope:

عندما يكون هناك تغيير في التكوين ، يحصل SpringBean الذي تم وضع علامة عليه على أنهRefreshScope على معاملة خاصة. تعالج هذه الميزة مشكلة الفاصوليا ذات الحالة المرضية التي تحقن تكوينها فقط عند تهيئتها. على سبيل المثال ، إذا كان لدى DataSource اتصالات مفتوحة عند تغيير عنوان URL الخاص بقاعدة البيانات عبر البيئة ، فربما تريد أن يتمكن أصحاب هذه الاتصالات من إكمال ما يقومون به. ثم ، في المرة التالية التي يقترض فيها شيء ما اتصالاً من التجمع ، يحصل على اتصال بعنوان URL جديد.

في بعض الأحيان ، قد يكون إلزاميًا تطبيق تعليق توضيحيRefreshScope على بعض الفاصوليا التي يمكن تهيئتها مرة واحدة فقط. إذا كانت الحبة "غير قابلة للتغيير" ، فسيتعين عليك إما إضافة تعليق توضيحي للحبوب باستخدامRefreshScope أو تحديد اسم الفئة أسفل مفتاح الخاصية spring.cloud.refresh.extra-refreshable.

تحديث نطاقات الفاصوليا هي عبارة عن وكلاء كسولون يقومون بالتهيئة عند استخدامها (أي ، عندما يتم استدعاء طريقة) ، ويعمل النطاق كذاكرة تخزين مؤقت للقيم التي تمت تهيئتها. لإجبار أحد برامج إعادة التشغيل على استدعاء الطريقة التالية ، يجب إبطال إدخال ذاكرة التخزين المؤقت الخاصة به.

RefreshScope عبارة عن فاصوليا في السياق ولديه أسلوب refreshAll () عام لتحديث كل الفاصوليا في النطاق عن طريق مسح ذاكرة التخزين المؤقت الهدف. تكشف نقطة نهاية/refresh هذه الوظيفة (عبر HTTP أو JMX). لتحديث حبة فردية بالاسم ، هناك أيضًا طريقة تحديث (سلسلة).

0
zappee