English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
يؤمن ميزة التجميع التلقائي في إطار Spring بإمكانك إدراج تعتماد الأجراء تلقائيًا. يستخدم داخليًا إدخال المربعات أو بناء الجسور.
تجميع التجميع لا يمكن استخدامه لحقول القيم الأساسية والنصوص. يمكن استخدامه فقط للمراجع.
يحتاج كمية أقل من الرمز، لأننا لا نحتاج إلى كتابة رمز للاضطراب الاعتماد بشكل صريح.
لا يوجد سيطرة للبرمجيات.
لا يمكن استخدامه للقيم الاصلية والقيم النصية.
هناك العديد من نماذج التجميع التلقائي:
نمط | شرح |
no | هذا هو النمط التلقائي الافتراضي. مما يعني أنه بالافتراض لا يوجد تجميع تلقائي. |
byName | يُستخدم نموذج byName للاضطراب الكائن بناءً على اسم الكائن. في هذه الحالة، يجب أن يكون اسم الخاصية واسم الكائن نفسه. سيُستدعى طريقة الإعداد الداخلية. |
byType | يُستخدم نموذج byType للاضطراب الكائن بناءً على النوع. لذلك يمكن أن تكون اسم الخاصية واسم الكائن مختلفين. سيُستدعى طريقة الإعداد الداخلية. |
constructor | يُستخدم نموذج التجميع التلقائي عن طريق استدعاء مُؤثرات الكائن للاضطراب. سيُستدعى مُؤثرات يحتوي على عدد كبير من المعلمات. |
autodetect | لا يُنصح باستخدامه من Spring 3 فصاعداً. |
لننظر في كود بسيط للتجميع التلقائي في Spring. تحتاج إلى استخدام خاصية autowire العنصر bean للتطبيق نموذج التجميع التلقائي.
<bean id="a" class="org.sssit.A" autowire="byName"></bean>
لننظر في مثال شامل لـ Spring للتركيب التلقائي. لإنشاء هذا المثال، قمنا بإنشاء 4 ملفات.
B.java A.java applicationContext.xml Test.java
B.java
هذا الكائن يحتوي فقط على المؤثرات والمؤثرات.
package org.sssit; public class B { B(){System.out.println("b is created");} void print(){System.out.println("hello b");} }
A.java
هذا الكائن يحتوي على مرجع كائن B والوظائف والمؤثرات.
package org.sssit; public class A { B b; A(){System.out.println("a is created");} public B getB() { return b; } public void setB(B b) { this.b = b; } void print(){System.out.println("hello a");} void display(){ print(); b.print(); } }
applicationContext.xml
<?xml version=1.0 encoding=UTF-8?> <beans xmlns=http://www.springframework.org/schema/beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="b" class="org.sssit.B"></bean> <bean id="a" class="org.sssit.A" autowire="byName"></bean> </beans>
Test.java
يأخذ هذا الكائن Bean من ملف applicationContext.xml ويُطلق على طريقة العرض.
package org.sssit; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { public static void main(String[] args) { ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml"); A a=context.getBean("a",A.class); a.display(); } }
الإخراج:
تم إنشاء b تم إنشاء a مرحبًا a مرحبًا b
في نمط التجميع التلقائي "byName"، يجب أن يكون معرف الجسم (bean id) واسم الاستدعاء متطابقين.
استخدام مُدخل المُدخلات الداخلية.
<bean id="b" class="org.sssit.B"></bean> <bean id="a" class="org.sssit.A" autowire="byName"></bean>
لكن، إذا تم تغيير اسم الجسم، لن يتم إدراج الاعتمادات.
لنلقي نظرة على كود تغيير اسم الجسم (bean) من b إلى b1.
<bean id="b1" class="org.sssit.B"></bean> <bean id="a" class="org.sssit.A" autowire="byName"></bean>
في نمط التجميع التلقائي "byType"، قد يختلف معرف الجسم (bean ID) عن اسم الاستدعاء. ولكن يجب أن يكون هناك جسم واحد فقط من النوع نفسه.
استخدام مُدخل المُدخلات الداخلية.
<bean id="b1" class="org.sssit.B"></bean> <bean id="a" class="org.sssit.A" autowire="byType"></bean>
في هذه الحالة، يمكنه العمل بشكل طبيعي لأنك أنشأت مثالاً من نوع B. لا يهم، يمكنك استخدام اسم مختلف عن اسم الاستدلال.
لكن، إذا كان لديك نوع من البنات المتعددة، فإنه لن يكون له تأثير وسيقوم بإطلاق استثناء.
دعونا نرى أن هناك العديد من بنات B في الكود.
<bean id="b1" class="org.sssit.B"></bean> <bean id="b2" class="org.sssit.B"></bean> <bean id="a" class="org.sssit.A" autowire="byName"></bean>
في هذه الحالة، سيقوم بإطلاق استثناء.
في نمط حقن التركيب التلقائي، يضخ مستشرف Spring التبعيات من خلال بناء التكامل الأعلى.
إذا كان لديك 3 بناء في فئة واحدة، بدون معاملات، مع معاملات واحدة واثنين، فإنه سيقوم بتنفيذ حقن التبعيات من خلال استدعاء بناء المعاملات اثنين.
<bean id="b" class="org.sssit.B"></bean> <bean id="a" class="org.sssit.A" autowire="constructor"></bean>
في حالة عدم وجود نمط التركيب التلقائي، لن يضخ مستشرف Spring التبعيات من خلال التركيب التلقائي.
<bean id="b" class="org.sssit.B"></bean> <bean id="a" class="org.sssit.A" autowire="no"></bean>