سؤال

لدي حالة استخدام حيث أحتاج إلى استدعاء طريقة (غير ثابتة) في الفول فقط - مرة واحدة عند تحميل التطبيقات في التطبيق. هل هو موافق، إذا كنت تستخدم methodinvokingFactorySan لهذا؟ أو لدينا حل أفضل؟

كملاحظة جانبية، يمكنني استخدام ConfigContextLoaderClistener لتحميل سياق التطبيق في تطبيق الويب. وتريد، أنه إذا تم إنشاء مثيل للمفانورة فقط منهجي () مرة واحدة.

كيف يمكن القيام بذلك بشكل جيد؟

هل كانت مفيدة؟

المحلول

يمكنك استخدام شيء مثل:

<beans>
    <bean id="myBean" class="..." init-method="init"/>
</beans>

سيتصل هذا بطريقة "INIT" عند إنشاء مثيل للفول.

نصائح أخرى

للتوسع في اقتراح Postconstruct في إجابات أخرى، هذا هو الحل الأفضل حقا، في رأيي.

  • إنه يحافظ على فصل التعليمات البرمجية من الربيع API (Postconstruct في Javax. *)
  • إنه يتلقى بشكل صريح طريقة التابعة الخاصة بك كشيء يجب استدعاؤه لتهيئة الفول
  • لا تحتاج إلى تذكر أن تضيف سمة طريقة INIT إلى تعريف حبوب الربيع الخاص بك، سيتصل الربيع تلقائيا بالطريقة (على افتراض أنك تقوم بتسجيل خيار التكوين التوضيحي في مكان آخر في السياق، على أي حال).

هناك ثلاث نهج مختلفة للنظر، كما هو موضح في المرجعي

استخدام سمة INTIONTION

الايجابيات:

  • لا يتطلب الفول لتنفيذ واجهة.

سلبيات:

  • لا توجد إشارة فورية هذه الطريقة مطلوبة بعد البناء لضمان تكوين الفول بشكل صحيح.

تنفيذ تهيئة

الايجابيات:

  • لا حاجة لتحديد الأسلوب INIT، أو تشغيل معالجة المكون / معالجة التوضيحية.
  • من المناسب للفاصوليا المزودة بمكتبة، حيث لا نريد التطبيق باستخدام هذه المكتبة لقلق نفسها مع دورة حياة الفول.

سلبيات:

  • أكثر غزية من نهج طريقة INIT.

استخدم JSR-250 postconstress. التعليق التوضيحي في الحياة

الايجابيات:

  • مفيدة عند استخدام المكونات المسح الضوئي للفاصوليا الاستيتقافية.
  • يجعل من الواضح أن طريقة محددة يجب استخدامها في التهوية. النية أقرب إلى الرمز.

سلبيات:

  • التهيئة لم تعد محددة مركزيا في التكوين.
  • يجب أن تتذكر أن تقوم بتشغيل معالجة التوضيحية (التي يمكن نسيانها في بعض الأحيان)

هل حاولت التنفيذ InitializingBeanب يبدو وكأنه بالضبط ما كنت بعد.

الجانب السلبي هو أن فولك يصبح على دراية الربيع، ولكن في معظم التطبيقات ليست سيئة للغاية.

يمكنك نشر مخصص BeanPostProcessor. في سياق التطبيق الخاص بك للقيام بذلك. أو إذا كنت لا تمانع في تنفيذ واجهة الربيع في فولك، فيمكنك استخدام تهيئة واجهة أو توجيه "الأسلوب الأول" (نفس الرابط).

لتعزيز أي ارتباك حول النهجين أي استخدام

  1. @PostConstruct و
  2. init-method="init"

من الخبرة الشخصية، أدركت أن استخدام (1) يعمل فقط في حاوية Servlet، بينما يعمل (2) في أي بيئة، حتى في تطبيقات سطح المكتب. لذلك، إذا كنت تستخدم الربيع في تطبيق مستقل، فستتضطر إلى استخدام (2) لتنفيذ "استدعاء هذه الطريقة بعد التهيئة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top