قبل قراءة هذه المقالة ، يمكنك أولاً الرجوع إلى مقالة " الفهم البسيط لأمثلة IOC و AOP و AOP الخاصة بـ Spring " للتعرف على IOC و AOP في الربيع. دعنا نصل إلى الموضوع. تقدم هذه المقالة كيفية تحديد وتحميل حبوب Java في الربيع.
سيناريوهات العمل
إنه أيضًا مثال على الأشخاص الذين يقودون. أولاً ، حدد واجهة سيارة واثنان ينفذان Benz و BMW ، ثم تحديد فئة الشخص ، والذي يعتمد على واجهة السيارة.
واجهة عامة السيارة {void go () ؛} الفئة العامة بنز تنفذ سيارة {public void go () {system.out.println ("Benz go ...") ؛ }} الفئة العامة BMW تنفذ Car {public void go () {system.out.println ("BMW GO ...") ؛ }} الفئة العامة شخص {string name = "" ؛ سيارة السيارة = فارغة ؛ السيارة العامة getCar () {return car ؛ } public void setcar (سيارة سيارة) {this.car = car ؛ } الشخص العام (اسم السلسلة) {this.name = name ؛ } public void drive () {system.out.println (name+"driving ...") ؛ car.go () ؛ }}في فئة الشخص ، يمكننا أن نرى أن كائن السيارة هو كائن تابع لهذه الفئة ويجب حقنه في فئة الشخص من خلال طريقة مُنشأة. الرمز أعلاه لا يزال ليس لديه ظل الربيع. دعونا نرى كيف يحقنه الربيع.
أضف تبعيات الربيع
في الوقت الحاضر ، تنطبق العديد من المشاريع على Maven لإدارة التبعيات ، وينطبق الشيء نفسه على هذا المشروع. سأضيف عقدة التبعية إلى pom.xml
<Rependency> <roupeD> org.springframework </rougeid> <StifactId> Spring-core </artifactid> <sophy> 3.2.6.release </version> </sependency> <redency> <roupiD> org.springframework </roucid> <sophy> 3.2.6.release </version> </sependency> <redence> <roupiD> org.springframework </rougeid> <StifactId> spring-context </shintifactid> <soph> 3.2.6.Release </version> <StifactId> spring-context </stifactId> <sople> 3.2.6.release </version> </sependency> <redence> <roupled> org.springframework </rougiD> </intifactid> spring-contxt-support </shintifactid>
ضع عقد التبعية هذه في عقدة التبعيات لملف pom.xml ، وسيقوم Eclipse تلقائيًا بتنزيل الحزم ذات الصلة إلى الموقع الافتراضي.
حدد وتجميع الفاصوليا يدويًا
قم بإنشاء ملف XML جديد باسم Bean.xml في الدليل الجذر للمشروع ، مع المحتوى التالي:
<؟ بر
يعرّف ملف XML أعلاه أولاً حبة بالمعرف كسيارة ، وحبوب مع معرف مثل TOM. السيارة هي اعتماد TOM ويتم تجميعها يدويًا في سمة السيارة لـ TOM من خلال <property name = "Car" Ref = "Car" />.
يسمى سلوك إنشاء علاقات تعاونية بين كائنات التطبيق الأسلاك ، وهو أيضًا جوهر التبعية على حقن الكائن.
بعد ذلك ، نقوم بتسهيل كائن سياق التطبيق في الطريقة الرئيسية والحصول على عقدة TOM في الفول.
تطبيق الفئة العامة {public static void main (string [] args) {ApplicationContext context = new ClassPathxMlapplicationContext ("bean.xml") ؛ الشخص توم = (شخص) سياق. getBean ("توم") ؛ tom.drive () ؛ }}تشغيل البرنامج والنتيجة الإخراج هي:
توم يقود ... BMW Go ...
التجميع التلقائي
كرر مرة أخرى ، يسمى سلوك إنشاء علاقة تعاونية بين كائنات التطبيق الأسلاك ، بدلاً من عملية إنشاء كائن. في ملف XML أعلاه ، قمت بتجميع كائن التبعية بواسطة <property name = "car" ref = "car" /> ، ولكن مع التطوير المستمر للتطبيق ، سيصبح ملف تكوين XML بالتأكيد أكثر تعقيدًا. بدأت الطريقة التي نربطها بالفاصوليا بالسيارة من خلال المرجع = "السيارة" في التأخر. بعد ذلك ، سأقدم كيف ينفذ الربيع حبوب التجميع التلقائية.
أنواع التجميع التلقائي
الربيع لديه أربع استراتيجيات التجميع. من أجل تقليل تعقيد هذه المقالة ، سأقدم استراتيجيتين شائعتين ، وطريقة الاسم الباقعة وطريقة bytype. كما يوحي الاسم ، فإن طريقة الاسم الباقعة هي معرفة ما إذا كان اسم السمة ومعرف الفول هو نفسه. في هذا المثال ، يحتوي فئة الشخص على سمة تسمى السيارة. إذا تم تعيين سمة الفصل أو التغيير على التجميع التلقائي وكانت سياسة التجميع ثمنًا ، فسيبحث Spring عن حبة مع سيارة معرف (يجب أن تكون ذات نفس الاسم). طريقة bytype هي مقارنة ما إذا كانت الأنواع هي نفسها. في هذا المثال ، إذا تم تعيين سمة السيارة لفئة الشخص أو فئة الشخص على التجميع التلقائي ، وكانت سياسة التجميع بايت ، نظرًا لأن سمة السيارة هي نوع السيارة ، فستبحث الربيع عن حبوب من نوع السيارة أو فئة الفرعية عند التجميع التلقائي.
استخدم XML لتنفيذ التجميع التلقائي
بعد ذلك ، سأقوم بتعديل الكود واستخدام طريقة تكوين XML لتحقيق التجميع التلقائي.
<؟ <value-arg constructor = "tom"/> </bean> </bans>
لا يتطلب فئة الشخص أي تعديل.
أولاً ، قمت بإزالة <propertyName = "Car" Ref = "Car"/> Line of Code لأنها طريقة يدوية. بعد ذلك ، أقوم بإضافة خاصية AutoWire = "ByName" إلى الفول مع معرف ، وقم بتعيينها لتجميع التبعية تلقائيًا بالاسم. عند الحصول على كائن الشخص ، يكون لجميع أسماء الممتلكات للشخص معاني خاصة. راقب Spring سمة أخرى تسمى CAR في فئة الشخص ، ووجدت حبة مع سيارة معرف في ملف التكوين ، لذلك تم تجميعها تلقائيًا إلى سمة سيارة الشخص.
التجميع التلقائي من خلال التعليق التوضيحي
نقوم بإجراء التعديلات التالية على bean.xml
<؟ id = "tom"> <constructor-arg value = "tom"/> </bean> </bans>
حذف سمة AutoWire = "ByName" من الفاصوليا مع معرف TOM ، ثم إضافة سمة افتراضية-AUTOWIRE = "BYNAME" إلى حبوب العقدة لتعيين القيمة الافتراضية لطريقة التجميع التلقائي لجميع الفاصوليا المحددة في الملف إلى اسم ثقل. ثم قم بإجراء بعض التعديلات على فئة الشخص وإضافة تعليق توضيحي Autowired إلى طريقة Setter للسيارة لإعلام Spring لتجميع الخاصية تلقائيًا. إعادة تشغيل الرمز وتبقى نتائج الإخراج دون تغيير.
@autowiredpublic void setcar (سيارة) {this.car = car ؛}إذا قمت بتنفيذ التجميع التلقائي من خلال التعليقات التوضيحية ، فأنت بحاجة أولاً إلى تعيين طريقة التجميع التلقائي الافتراضي على جذر الفاصوليا ، ثم لا تحتاج إلى تكوين سمة الأسلاك التلقائية لكل فول تحتاج إلى تجميع أوتوماتيكي في ملف التكوين (إذا كانت الطريقة غير متسقة مع الافتراضية ، فلا يزال بإمكانك تكوينها بشكل منفصل لتغلب على طريقة التجميع التلقائية المتدفقة). تكون طريقة التعليق التوضيحي أكثر حساسية ، ويمكنها التحكم في مستوى السمة من الفاصوليا التي تحتاج إلى تجميع تلقائيًا.
في جميع الكود أعلاه ، نستخدم فئة org.zdk.springproj1.bmw كاعتماد على فئة الشخص. إذا كان فئة الشخص لا تحتاج إلى قيادة سيارة BMW بسبب احتياجات العمل ، فمن الضروري تغيير التكوين إلى org.zdk.springproj1.benz ، دون تعديل أي رمز Java. هذه هي قوة الربيع كحاوية IOC.
لخص
ما سبق هو كل التفسير التفصيلي لتعريف الربيع وفاصوليا التجميع في هذه المقالة. آمل أن يكون ذلك مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى هذا الموقع:
تحليل رمز مثيل Bean Configuration Configuration Java
شرح مفصل لدورة حياة استخدام تكوين الربيع
إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!