English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

تركيب Spring التلقائي

يؤمن ميزة التجميع التلقائي في إطار 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

1) نمط التجميع التلقائي "byName"

في نمط التجميع التلقائي "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>

2) نمط التجميع التلقائي "byType"

في نمط التجميع التلقائي "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>

في هذه الحالة، سيقوم بإطلاق استثناء.

3) نمط حقن التركيب التلقائي

في نمط حقن التركيب التلقائي، يضخ مستشرف Spring التبعيات من خلال بناء التكامل الأعلى.

إذا كان لديك 3 بناء في فئة واحدة، بدون معاملات، مع معاملات واحدة واثنين، فإنه سيقوم بتنفيذ حقن التبعيات من خلال استدعاء بناء المعاملات اثنين.

<bean id="b" class="org.sssit.B"></bean>
<bean id="a" class="org.sssit.A" autowire="constructor"></bean>

4) بدون نمط التركيب التلقائي

في حالة عدم وجود نمط التركيب التلقائي، لن يضخ مستشرف Spring التبعيات من خلال التركيب التلقائي.

<bean id="b" class="org.sssit.B"></bean>
<bean id="a" class="org.sssit.A" autowire="no"></bean>