أنا تفكيك كيف يدير Spring كائنات Java مع مثال بسيط.
أولاً ، حدد pojo البسيط ، الرمز هو كما يلي:
package com.jvk.ken.spring ؛ demo public class demo {private string name ؛ public demo () {name = "im demo.ملف تكوين الربيع المقابل كما يلي:
<؟ Xmlns: Context = "http://www.springframework.org/schema/context" http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd "> <bean id =" demo "/> </bans>
رمز الاختبار البسيط هو كما يلي:
حزمة com.jvk.ken.spring ؛ استيراد org.springframework.beans.factory.beanfactory {testSpring () ؛} اختبار الفراغ الثابت الخاص () يلقي الاستثناء {beanfactory bf = new xmlbeanfactory (جديد classPathResource ("ApplicationContext.xml")قم بتشغيل فئة الاختبار وإخراج المعلومات التالية ، مما يشير إلى أنه تم تشغيل مثال في الربيع البسيط بنجاح.
2012-3-28 22:18:07 org.springframework.beans.factory.xml.xmlbeandefinitionReader loadbeandefinitions المعلومات: تحميل تعريفات حبة XML من موارد المسار الفئة [applicationContxt.xml] class com.jvk.ken.spring.dem ym demo.
من رمز Java القصير وملف تكوين XML ، يمكننا أن نرى أن XmlBeanFactory يقوم بتجميع Javabean من خلال قراءة ملف تكوين XML ، وإرجاع الكائن المطلوب عندما يقوم المستخدم باستدعاء طريقة GetBean. لتقليد سلوكه ، أقوم بتحديد فاصوليا بسيطة.
حزمة com.jvk.ken.spring ؛ استيراد java.util.hashmap ؛ استيراد java.util.map ؛ الطبقة العامة mybeanfactory {// حفظ تعريف الخريطة الفاصوليا <string ، الفاصوليا = new hashmap <string ، class> () Beans.get (id) .NewInstance () ؛} سلسلة خاصة Xmlfile ؛ Public MyBeanFactory (String Xmlfile) يلقي classnotfoundException {super () ؛ this.xmlfile = xmlfile ؛ init () ؛} private void init () يلقي classnotfoundException {// تهيئة وتحليل xml ، يتم حذف التحليل الفعلي لـ XML هنا ، واستخدام الرمز الصلب system.out.println ("ملف التكوين:"+xmlfile) "com.jvk.ken.spring.demo" ؛ class <؟> loadclass = this.getClass (). getClassloader ().رمز الاختبار كما يلي:
حزمة com.jvk.ken.spring ؛ اختبار الطبقة العامة {public static void main (string [] args) يلقي الاستثناء {testNotspring () ؛} private static void testnotspring () rems {demo) bf.getBean ("Demo") ؛ System.out.println (Bean.getClass ()) ؛ Bean.printName () ؛}}بعد التشغيل ، يتم إخراج المعلومات التالية:
ملف التكوين: ApplicationContext.xml Class com.jvk.ken.spring.demo أنا Demo.
يوضح الرمز القصير أعلاه كيف يعمل الربيع كأبسط مصنع بين الفول. دعنا نعدل الكود أدناه قليلاً لتحليل ما يحدث في الربيع. أولاً ، قم بتغيير طريقة البناء بدون المعلمات للفئة التجريبية إلى القطاع الخاص.
Private Demo () {name = "im demo." ؛ }كشف تشغيل رمز الاختبار أنه لم يكن هناك اختلاف في نتائج اختبار الربيع ، لكن MyBeanFactory المخصص الخاص بي قد أبلغ عن رسالة الخطأ التالية:
استثناء في الموضوع "Main" Java.lang.IlegalAccessException: Class com.jvk.ken.spring.mybeanfactory لا يمكنه الوصول java.lang.class.newinstance0 (class.java:349) في java.lang.class.newinstance (class.java:308) في com.jvk.ken.spring.mybeanfactory.getbean (mybeanfactory.java:12) في com.jvk.ken.spring.test.testnotspring (test.java:25) في com.jvk.ken.spring.test.main (test.java:9)
الربيع سحري جدا؟ لا ، الرمز الذي كتبته بسيط للغاية ، ويمكن تشغيله مباشرة بتعديل بسيط.
الكائن العام getBean (معرف السلسلة) يلقي استثناء {class1 = beans.get (id) ؛ مُنشئ المعلن = class1.getDeclaredConstructor () ؛ DESTRUCTRUCTOR.SetAccible (true) ؛ إرجاع reconderConstructor.newinstance () ؛ }ما سبق هو أنقى جافابان يديره حاوية الربيع. يدعم Spring أيضًا نوعًا آخر من الفول ، المسمى Factory Bean ، المثال أفضل من ألف كلمة ، يرجى الاطلاع على الرمز
package com.jvk.ken.spring ؛ استيراد org.springframework.beans.factory.factorybean ؛ الطبقة العامة demofactory الأدوات المصنع {Override public getObject () rems {{return new demo () ؛ خطأ شنيع؛}}بعد إضافة الفئة demofactory ، قم بتعديل ملف تكوين الربيع في نفس الوقت
<bean id = "demo" />
لا يتم تعديل الرموز الأخرى. بعد تشغيل رمز الاختبار ، تكون نتائج الإخراج هي نفسها كما كان من قبل. لماذا يتم تكوين الفئة com.jvk.ken.spring.demofactory مع المعرف ، ولكن النتيجة التي تم إرجاعها هي مثيل تجريبي؟ وذلك لأن Spring يكتشف أن Disofactory هو حبة خاصة تنفذ واجهة المصنع. سيتم استدعاء طريقة getObject قبل إرجاع النتيجة ، وبالتالي فإن النتيجة النهائية هي الكائن التجريبي. بالطبع ، إذا كنا بحاجة حقًا إلى الحصول على فول المصنع ، فيمكننا كتابة BF.GetBean ("& Demo") مثل هذا.
لخص
ما سبق هو كل التفسير المفصل لرمز إنشاء كائن فول تنفيذ الربيع ، وآمل أن يكون مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى الموضوعات الأخرى ذات الصلة على هذا الموقع. إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!