سؤال

في الربيع ، كان من الممكن إنشاء أي فئة من خلال تحديد الفول المقابل في XML Conf. كان من الممكن أيضًا إنشاء المزيد من الفول لنفس الفئة ذات المعلمات المختلفة .....

هل هذه الميزات في CDI أيضًا ، وهي من الممكن إنشاء مثيلات مختلفة من نفس الفئة مع معلمات التهيئة المختلفة؟

هل من الممكن أيضًا إنشاء فول دون تغيير الفصل .... أعني دون إضافة شرح؟

وأضاف

اسمحوا لي أن أقدم مثالا.

<bean id="someBean1" class="org.mm.MyBean">
    <property name="x" value="xx"/>
    <property name="y" value="yy"/>
    <property name="z" value="zz"/>       
</bean>
<bean id="someBean2" class="org.mm.MyBean">
    <property name="x" value="other value"/>
    <property name="y" value="yy2"/>
    <property name="z" value="zz2"/>       
</bean>

كيف يمكن أن تقوم بتثبيت مثيلتين من نفس الفئة وتهيئتها بقيم حقل مختلفة؟

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

المحلول

خياران بقدر ما أستطيع أن أرى:

  • بدون مزيد من المعرفة بمواصفتك ، أفترض أنك إما تريد تقديم بعض التنفيذ البديل لمشكلات الاختبار أو التكوين (SHOM-) (على سبيل المثال PaymentProvider آخر لخدمة الطلب). هذا مدعوم من المواصفات نفسها ، إلقاء نظرة على @Alternative هنا (ولا تكرر خطأي الأولي وتنسى تنشيط البدائل في beans.xml)

  • للحصول على تكوين XML على غرار الربيع ، يمكنك استخدام Seam 3 Config, ، والذي يوفر تكوين XML تمامًا كما هو موضح. راجع للشغل ، كان هذا جزءًا من JSR 299 ، ولكن تمت إزالته من المواصفات لأي سبب من الأسباب.

نصائح أخرى

هناك بعض الطرق للقيام بذلك.

على سبيل المثال استخدم new

inject @new yourbean yb ؛ private inject @new yourbean yb2 ؛

هذا يجبر الحاوية على إنشاء مثيل جديد ، بغض النظر عن النطاق الذي كان لدى الفول في الأصل.

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

يمكنك بسهولة استخدام أساليب المنتج وإذا كان لديك حالات متعددة يجب أن تنتجها طريقة استخدم مؤهلات CDI لتمييز أنواع مختلفة من الحالات.

كما يمكنك استخدام Cean Config للقيام بذلك في الربيع ، لكنني أعتقد أن أساليب المنتج هي طريقة أكثر أناقة للقيام بذلك. اعتمادًا على حالة الاستخدام الخاصة بك ، هناك خيار آخر هو @alternative.

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