إن استخدام ملفات XML لتكوين ملفات تكوين الربيع يطلب بالفعل Spring لتنفيذ الرمز المقابل ، على سبيل المثال:
إن استخدام عنصر <Nean> هو في الواقع السماح لـ Spring بتنفيذ المُنشئ غير المسموح به أو استخدام المعلمة ، استخدم العنصر <sprention> ، في الواقع للسماح لـ Spring بتنفيذ طريقة Setter مرة واحدة
ومع ذلك ، قد تحتوي برامج Java أيضًا على أنواع أخرى من العبارات: استدعاء طرق Getter ، والاتصال بالأساليب العادية ، والوصول إلى مجالات الفئات أو الكائنات ، وما إلى ذلك. يوفر Spring أيضًا بناء جملة التكوين المقابل لمثل هذه العبارات:
Call Getter Method: استخدم PropertyPathfactoryBean
استدعاء القيمة المودعة لفئة أو كائن: استخدم FileDretrievingfactorybean
استدعاء الطريقة العادية: استخدم methodinvokingfactorybean
حقن قيم خاصية الفاصوليا الأخرى
يتم استخدام PropertyPathFactoryBean للحصول على قيمة خاصية الحبة الهدف (في الواقع القيمة التي تم إرجاعها عن طريق استدعاء طريقة getter). يمكن حقن القيمة التي تم الحصول عليها في الفاصوليا الأخرى ، أو يمكن تحديد حبة جديدة مباشرة. انظر ملف التكوين التالي:
<bean id = "person"> <property name = "Age" value = "30"/> <property name = "son"> <!-استخدم الفاصوليا المتداخلة لتحديد قيم الممتلكات-> <bean> <property name = "age" value = "11"/> </bean> <//propert name = "Age"> <!-لاحظ أن propertypathfactorybean يستخدم هنا-> <bean id = "person.son.age"/> </propert
يمكن رؤية خصائص فئات الشخص والابن من ملف التكوين ، والذي لم يعد ممنوعًا. البرنامج الرئيسي هو كما يلي:
اختبار الفئة العامة {public static void main (String args []) {ApplicationContext ac = new ClassPathMlapPlicationContext ("ApplicationContext.xml") ؛ System.out.println ("Age =" + AC.GetBean ("Son2" ، son.class) .getage ()) ؛ }} نتيجة الإخراج:
العمر = 11
لا يمكن لقيمة خاصية مثيل الفاصوليا حقن فول آخر فحسب ، بل تحدد أيضًا قيمة خاصية مثيل الفاصوليا كمثيل فول. ويتم ذلك أيضًا من خلال PropertyPathFactoryBean. أضف هذه الفقرة إلى ملف التكوين أعلاه:
<bean id = "son1"> <!-حدد الفول الهدف ، يشير إلى أي مكون SON1 يأتي من-> <property name = "targetbeanname" value = "person" /> <!-تحديد السمة ، مع الإشارة إلى خاصية SON1 التي تأتي من-> <property name = "propertypath"
قم بتنفيذ فئة الاختبار أعلاه واستبدل SON2 بـ SON1 ، والنتيجة هي نفسها.
حقن قيمة مجال الفاصوليا الأخرى
من خلال فئة fieldretrievingfactorybean ، يمكنك ضخ قيم حقل الفاصوليا الأخرى في الفاصوليا الأخرى ، أو يمكنك تحديد حبة جديدة مباشرة. هنا مقطع التكوين:
<bean id = "son"> <property name = "Age"> <bean id = "java.sql.connection.transaction_serializable"/> </propert
يشبه برنامج الاختبار الرئيسي التعريف أعلاه ، ولم يعد متوفرًا هنا ، ونتائج التنفيذ هي كما يلي:
العمر = 8
في هذا التكوين ، فإن قيمة عمر كائن SON تساوي قيمة java.sql.connection.transaction_serializable. في التعريف أعلاه ، عند تحديد حبة مصنع FielDretrievieFactorybean ، فإن المعرف المحدد ليس هو المعرف الفريد لمثيل الفول ، ولكن التعبير عن الحقل (أي ، القيمة الواجب إخراجها).
ملاحظة: يمكن أن يكون الحقل ثابتًا أو غير منتظم. تعبير الحقل المحدد بواسطة مقتطف التكوين أعلاه هو قيمة حقل ثابت ، بحيث يمكن الوصول إليها مباشرة من خلال اسم الفصل. إذا كانت قيمة الحقل غير منتظمة ، فيجب الوصول إليها من خلال الفاصوليا الموجودة بالفعل في الحاوية - أي ، يجب أن تكون العبارة الأولى للتعبير الحقل هي الفاصوليا الموجودة بالفعل في الحاوية.
يمكن أيضًا تعريف قيمة الحقل على أنها مثيل بين الفول ، على سبيل المثال ، إضافة الفقرة التالية إلى ملف التكوين:
<bean id = "Age"> <!-TargetClass يحدد الفئة الهدف حيث يوجد الحقل-> <property name = "targetclass" value = "java.sql.connection" /> <!-TargetField يحدد اسم الحقل-> <property name = "targetfield" value = "transactaction_serializable" /> /> /
أضف الإخراج التالي إلى البرنامج الرئيسي:
System.out.println ("Age =" + AC.GetBean ("Age")) ؛
نتيجة التنفيذ هي نفسها كما هو موضح أعلاه.
عند استخدام FielDretrievingFactoryBean للحصول على قيمة الحقل ، يجب عليك تحديد الخصائص التالية:
TargetClass أو TargetObject: يستخدم لتحديد تراكم الهدف أو الكائن الهدف حيث توجد قيمة الحقل. إذا كان الحقل الذي تريد الحصول عليه ثابتًا ، فاستخدم TargetClass لتحديد تراكم الهدف ؛ إذا كان الحقل غير منتظم ، فاستخدم TargetObject لتحديد الكائن الهدف.
TargetField: يحدد اسم حقل الفئة الهدف أو الكائن الهدف
إذا كان الحقل مجالًا ثابتًا ، فهناك طريقة أكثر إيجازًا لكتابته:
<bean id = "age"> <!-تحدد القيمة أي قيمة مجال ثابت للفئة-> <property name = "staticfield" value = "java.sql.connection.transaction_serializable" /> </bean>
الطرق التي حقن الفاصوليا الأخرى إرجاع القيم
من خلال حبة مصنع MethodInvokingFactoryBean ، يمكن حقن قيمة إرجاع الطريقة المستهدفة في قيمة خاصية الفول. يتم استخدام حبة المصنع هذه للحصول على قيمة الإرجاع للطريقة المحددة. يمكن أن تكون الطريقة إما طريقة ثابتة أو طريقة مثيل ؛ يمكن حقن هذه القيمة في السمة المحددة لمثيل Bean المحدد أو تعريفها مباشرة على أنها مثيل فول. انظر مثال:
<bean id = "valuegenerator" /> <bean id = "son1"> <property name = "age"> <!-احصل على طريقة إرجاع الأسلوب: اتصل بالطريقة getValue لـ valuegenerator-> <bean> <property name = "targetObject" ref = /propert
هنا هو ValueGenerator:
الفئة العامة ValueGenerator {public int getValue () {return 2 ؛ } int static int getStaticValue () {return 3 ؛}} لا يزال برنامج الاختبار يطبع قيمة العمر في SON1 ، وتم حذف الكود ، والنتيجة هي كما يلي:
العمر = 2
إذا كنت ترغب في استدعاء طريقة ثابتة ، فقم بتعديل التكوين إلى:
<bean id = "son1"> <property name = "age"> <!-الحصول على الطريقة قيمة الإرجاع: استدعاء طريقة getStaticValue لـ valuegenerator-> <biet> <property name = "targetclass" value = "com.abc.util.valuegenerator"/> <property name = "targetmethod" value = "getStaticValue"/>
نتائج الاختبار هي:
العمر = 3
نظرًا لأن Java يدعم التحميل الزائد ، فإن إعطاء اسم الطريقة لا يكفي فقط لتحديد طريقة الاتصال. يمكن استدعاء التكوين أعلاه بنجاح لأنه لا يوجد أي طريقة في ValueGenerator لديها معلمات. إذا كانت هناك معلمات في الطريقة ، كيفية تكوينها؟ قم بتضمين المحتوى التالي في ملف التكوين:
<bean id = "sysprops"> <property name = "targetclass" value = "java.lang.system" /> <property name = "targetmethod" value = "getProperties" /> <bean> <bean id = "javaversion> <!-أشير إلى sysprops bean essprops أعلاه- value = "getProperty"/> <!-تكوين المعلمات هنا-> <property name = "endures"> <!-استخدم عنصر القائمة لسرد معلمات متعددة لطريقة الاتصال-> <list> <value> java.version </value> </list> </spretary> <bean>
في المثال أعلاه ، يعادل استدعاء طريقة getProperty لـ java.lang.system مع "java.version" كمعلمة. ستقوم قيمة الإرجاع بإنشاء حبة تدعى Javaversion. وهذا يعادل:
javaversion = java.lang.system.getProperty ("java.version") ؛
مثل الحقل في المقالة السابقة ، إذا كانت الطريقة التي سيتم استدعاؤها هي طريقة ثابتة ، فهناك أيضًا طريقة أكثر إيجازًا:
<bean id = "mybean"> <!-استخدم خاصية staticMethod لتحديد الطريقة المستهدفة مباشرة للفئة الهدف-> <property name = "staticmethod" value = "com.abc.Util.valuegenerator.getStaticValue" /> </bean>
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.