1. نظرة عامة على تكوين الربيع
1.1. ملخص
يقرأ حاوية الربيع معلومات تكوين الفول من تكوين XML ، وشرح Java ، وشرح الربيع لتشكيل سجل تعريف الفول ؛
تحديد السجل لتشكيل الفول حسب الفول ؛
ضع مثيلات الفول في حمام سباحة ذاكرة التخزين المؤقت.
يستخدم التطبيق الفاصوليا.
1.2. التكوين المستند إلى XML
(1) نظرة عامة على ملف XML
Xmlns ------------------------------------------------------------------------------------------------------------------------
XMLNS: XSI ------------ مساحة الاسم القياسية ، تستخدم لتحديد ملف المخطط لمساحة الاسم المخصصة
Xmlns: xxx = "aaaaa" ------------ مساحة الاسم المخصصة ، xxx هي الاسم المستعار ، والقيمة التالية AAAA هي الاسم الكامل
XSI: Schemalocation -------- تحديد ملف مخطط معين لكل مساحة اسم ، التنسيق: عنوان ملف الاسم الكامل مساحة الاسم. . . منفصل مع المساحات
2. تكوين الفول الأساسي
2.1. تسمية الفول
(1) يمكن لكل من المعرف والاسم تحديد أسماء متعددة ، ويتم فصل الأسماء عن طريق الفواصل أو الفاصلة أو المساحات.
<beanname = "#car ، 123 ، $ car" class = "xxxxxxxxx">
يمكن للمستخدمين استخدام GetBean ("#Car") ، GetBean ("123") ، GetBean ("$ Car") إلى GetBean.
(2) إذا لم يتم تحديد سمات المعرف والاسم ، فسيستخدم Spring تلقائيًا الاسم المؤهل بالكامل للفئة كاسم للفول
(3) إذا كان هناك العديد من الفاصوليا المجهولة ، أي أنه لا يوجد <bean/> مع المعرف والاسم المحدد ، على افتراض أن الاسم المؤهل بالكامل للفئة هو xxx.
ثم احصل على الفاصوليا الأولى باستخدام getBean ("xxx") ، احصل على الفول الثاني باستخدام getBean ("xxx#1") ، احصل على الفول الثالث باستخدام getBean ("xxx#2").
3. حقن التبعية
3.1. حقن السمة
(1) يتطلب حقن السمة من الحبة توفير مُنشئ افتراضي وتوفير طريقة محددة للسمات التي تحتاج إلى حقنها. يقوم Spring باستدعاء المُنشئ الافتراضي لتشكيل كائن Bean ، ثم يستدعي طريقة Setter لحقن قيمة الخاصية من خلال الانعكاس.
(2) سيتحقق الربيع فقط ما إذا كانت هناك طريقة Setter المقابلة في الفول ، ولن يتم تقديم أي متطلبات فيما إذا كان هناك متغير سمة مقابل في الفول.
(3) مواصفات جافابان الخاصة لتسمية السمة: أول رسالتين من المتغير إما جميع الأحرف الكبيرة أو كلها صغيرة.
3.2. حقن المنشئ
(1) لن يؤثر ترتيب تكوين معلمات المنشئ على نتائج التكوين. يتبنى ملف تكوين Spring سياسة لا علاقة لها بترتيب ملصقات العناصر. يمكن أن تضمن هذه الاستراتيجية اليقين في معلومات التكوين إلى حد ما.
(2) مطابقة المعلمات عن طريق الفهرس
إذا كان نوع معلمة إدخال المنشئ هو نفسه ، فأنت بحاجة إلى تحديد الفهرس المتسلسل للمعلمات ، وإلا لا يمكن تحديد العلاقة المقابلة. يحب:
<constructor-argindex = "0" value = "xxxxxx"> <constructor-argindex = "1" value = "xxxxxx">
يبدأ الفهرس من 0.
(3) مشكلة التبعية الدائرية
إذا كان تكوين مُنشئ 2 فاصوليا يعتمد على الطرف الآخر ، فستحدث مشكلة في سلسلة الحال.
الحل هو تغيير حقن المنشئ ليعزو الحقن.
3.3. حقن طريقة المصنع
(1) طريقة المصنع غير الاصطناعية
نظرًا لأن طريقة المصنع ليست ثابتة ، يجب عليك أولاً إنشاء حبة مثيل لفئة المصنع واستخدام المصنع للرجوع إليها
<beanid = "carfactory" class = "factory class"/> <beanid = "car5" factory-bean = "carfactory" method = "createCar"/>
(2) طريقة المصنع الثابت
<beanid = "car5" class = "factory class" المصنع- method = "createCar"/>
3.4. شرح مفصل لمعلمات الحقن
(1) 5 أحرف خاصة في XML
| الرموز الخاصة | تسلسل الهروب | الرموز الخاصة | تسلسل الهروب |
| < | < | "" " | |
| > | > | ' | ' |
| & & | & & |
(2) <! [CDATA []]>
الغرض من <!
(3) حقن القيمة الفارغة باستخدام علامة <null/>
(4) سمات متتالية
<beanid = "parent" class = "xxxxxxx"> <propertyName = "child.xxx" value = "property value of dependency object"/> </bean>
قبل SPRING3.0 ، يجب إنشاء مثيل لطفل كائن التبعية أولاً ، وإلا سيتم طرح استثناء. بعد Spring3.0 ، ليست هناك حاجة لعرض مثيل. ستعمل حاوية الربيع تلقائيًا على إنشاء كائن التبعية.
(5) دمج التجميع
<setmerge = "true"/>
شائع الاستخدام في الفئات الفرعية لدمج عناصر تجميع من فئة الوالدين
(6) تكوين الفاصوليا نوع المجموعة من خلال مساحة الاسم
إذا كنت ترغب في تكوين نوع مجموعة مجموعة من نوعية نوع المجموعة ، فيمكنك تكوينه من خلال مساحة الاسم UTIL.
3.5. التجميع التلقائي
(1) يوفر عنصر <bean/> سمة تحدد نوع الأوتار التلقائي
3.6. حقن الطريقة
إذا حقن الفاصوليا النموذجية في الفاصوليا المفردة ونأمل في إعادة حبة جديدة في كل مرة نسميها ، فلن يكون من الممكن استخدام طرق الحقن التقليدية لأن عمل الفاصوليا المفردة التي تضخ الفاصوليا المرتبطة بها لا تحدث مرة واحدة فقط.
(1) حل اختياري هو تمكين الفول المضيف من تنفيذ واجهة Beanfactoryaware ، بحيث يمكن لحبة المضيف الوصول إلى مراجع الحاوية ، بحيث يمكن تعديل طريقة الحصول
مصنع.
(2) الأسلوب المذكور أعلاه يزدهران الكود والربيع ، وهي أسوأ طريقة للقيام بها ، ويمكننا فصلها من خلال حقن الطريقة.
نحتاج فقط إلى تحديد واجهة ، وتحديد طريقة مجردة للحصول على حبوب تابعة في الواجهة. تكوين الربيع كما يلي:
<BeanID = "Car" class = "Bean exteded"/> <beanid = "host" class = "interface bean"> <lookup-methodname = "getCar" bean = "car"/> </bean>
توفر علامة عنصر Method Lookup تنفيذًا ديناميكيًا لـ GetCar () من حبوب الواجهة. يعتمد تنفيذ حقن الأسلوب بشكل أساسي على تقنية العمليات الديناميكية في حزمة CGLIB.
3.7. استبدال الطريقة
استخدم Bean2 لاستبدال طريقة GetCar من Bean1 ، شريطة أن يكون Bean2 يجب أن ينفذ واجهة MethentReplacer ، والتكوين كما يلي:
<Beanid = "bean1" class = "aaaaaaaaa"> <استبدال methodname = "getCar" replacer = "bean2"/> </beanid> <bietid = "bean2" class = "bbbbbbbbbbbbb"/>
4. العلاقة بين <bean>
4.1. الميراث
يمكن أن يكون تكوين الفول الأصل ورثًا بواسطة فئات فرعية لتجنب التعريفات المتكررة. التكوين كما يلي:
<beanid = "parent bean" class = "aaaaaa" ustribles = "true"/> <beanid = "child bean" class = "bbbbbb">
يمكن للفئات الفرعية تجاوز تكوين الفئة الأصل. إذا لم يتم تحديد الملخص = "صحيح" لفئة الأصل ، فسيتم إنشاء إنشاء فول الأصل.
4.2. الاعتماد
تعتمد بعض الفاصوليا على الفاصوليا على الفاصوليا الأخرى ، ويجب إنشاء مثيل للفاصوليا الأخرى قبل أن تتمكن من إنشاء إنشاء فول المضيف. يوفر Spring السمة التي تعتمد ، ويحدد أن فول التبعية يتم إنشاء مثيل له أولاً ، مثل:
<beanid = "host" class = "aaaaaa" يعتمد على on = "b1"/> <beanid = "b1" class = "bbbbbbbb"/>
إذا كان هناك العديد من الفاصوليا قبل الاعتماد ، فيمكنك إنشاء اسم الفاصوليا عن طريق الفواصل أو المساحات أو المنقص.
4.3. نطاق الفول
(1) ستعمل حاوية الزنبرك على إنشاء جميع الفول عند بدء تشغيلها. إذا كنت لا ترغب في إنشاء مثيله مقدمًا ، فيمكن أن تتحكم خاصية Lazy-Init = "True" لـ <Bean/>
(2) النطاق المتعلق بتطبيق الويب
إذا كان المستخدم يستخدم الطلب والجلسة ونطاق GlobalSession ، فيجب إجراء التكوين الإضافي في حاوية الويب أولاً:
في الإصدارات السفلية من حاويات الويب (قبل Servlet 2.3) ، يمكنك استخدام تكوين مرشح طلب HTTP:
<Ivilter> <ilter-name> requestContextFilter </filter-name> <filter-class> org.springframework.web.filter.requestContextFilter </filter-class> </filter> <filter mapping> </filter mapping>
في الإصدارات العليا من حاويات الويب ، يمكنك استخدام مستمع طلب HTTP لتكوينه:
<StaNeer> <Segyer-Class> org.springframework.web.context.request.requestContextListener </leader-class> </stanker>
(3) مشكلة التبعية النطاق
عند حقن الفاصوليا المغطاة بالويب في Singleton أو Ority Beans ، استخدم AOP ، على سبيل المثال:
<bean id = "web1" scope = "request"> <aop: scoped-proxy/> </bean> <bean id = "singleton1"> <property name = "z1" ref = "web1"/> </bean>
4.4. المصنع
بشكل عام ، يستخدم Spring سمة الفصل من <bean/> لتحديد حبة إنشاء فئة التنفيذ من خلال آلية الانعكاس. ولكن في بعض الحالات ، تكون عملية إنشاء فول أكثر تعقيدًا. إذا كان ذلك بالطريقة التقليدية ، مطلوب كمية كبيرة من معلومات التكوين في <Nean>. تكون مرونة طريقة التكوين محدودة ، ويمكن الحصول على حل بسيط باستخدام طرق الترميز.
يوفر Spring واجهة فئة مصنع org.springframework.beans.factory.Factorybean لهذا ، ويمكن للمستخدمين تخصيص منطق الفاصوليا من خلال تنفيذ هذه الواجهة.
عندما تكون فئة التنفيذ التي تم تكوينها بواسطة سمة الفئة من <bean/> هي المصنع والفئة الفرعية الخاصة به ، فإن طريقة عودة المصنع () لا تُرجع المصنع والفئة الفرعية نفسها ، لكن الكائن الذي تم إرجاعه بواسطة طريقة مصنع GetObject ().
إذا كنت ترغب في الحصول على كائن المصنع وفئاته الفرعية نفسها ، فبادسم بشكل صريح اسم beanname مع بادئة "&" ، مثل GetBean ("& car5") عندما تكون طريقة getBean (Beanname).
5. التكوين المستند إلى التعليقات التوضيحية
5.1. نوع التعليقات التوضيحية
component ----- التعليق التوضيحي الأصلي
التعليقات التوضيحية المشتقة:
repository: شرح داو
service: خدمة التسمية
controller: مراقبة التعليقات التوضيحية
5.2. استخدم معلومات تكوين التعليقات التوضيحية لبدء حاوية الربيع
(1) بعد ربيع 2.5 ، تم تقديم مساحة اسم السياق ، والتي توفر تطبيق التعليقات التوضيحية لتحديد الفاصوليا عن طريق مسح حزمة الفئة:
<السياق: مكون المسح الضوئي package = "xxxxxxxxx" pattern = "xxxx/*.. class">
يتم استخدام سمة النمط المورد لتحديد الفئات تحت حزم محددة تحتاج إلى مسحها في الحزمة الأساسية
(2) هناك المزيد من العلامات الفرعية للمرشح الأقوى
<context: component-scan base-package = "xxxxxxxxxxx"> <context: include-filter type = "xxxx" expression = "xxxxxxxxxxxxxxx"/> <context: exclude-filter type = "xxxx" expression =
من بين جميع الأنواع ، تعد قدرة تصفية SideJ هي الأقوى.
5.3. التجميع التلقائي للفاصوليا
(1) Autowired
@autowired مباريات عن طريق الكتابة افتراضيا. إذا لم يكن هناك حبة مطابقة في الحاوية ، فسيتم طرح استثناء عند بدء حاوية الربيع. يمكنك استخدام Autowired (مطلوب = خطأ) للتعليق ، ولن يتم إلقاء أي استثناء.
استخدم Autowired للتعليق مباشرة على معلمات الطريقة. إذا كانت الطريقة تحتوي على معلمات متعددة ، بشكل افتراضي ، يقوم Spring تلقائيًا بتحديد الفاصوليا التي تطابق نوع المعلمة للحقن.
باستخدام @Autowired enoutation لمتغيرات التجميع ، يمكنك ضخ جميع الفاصوليا التي تتطابق مع نوع العنصر في المجموعة ، وهو قوي للغاية.
باستخدام خاصية AuTowired Assembler ، لا يمكن أن يكون هناك طريقة setter.
(2) Qalifiler
إذا كان هناك أكثر من حبة مطابقة في الحاوية ، فيمكن أن يكون اسم الفول مؤهلاً بواسطة Qualifiler.
(3) دعم العلامات والشرح
يدعم Spring أيضًا @Resource المحددة بواسطة JSR-250 و Enject Eanotations المحددة بواسطة JSR-330
يتطلب Resource توفير فول سمة الفول. إذا كانت السمة فارغة ، فسيتم استخدام اسم المتغير أو الأسلوب تلقائيًا كاسم للحبة.
(4) النقاط الرئيسية:
إذا كنت تستخدم Autowired فقط ، فلا نزال بحاجة إلى تحديد عقدة <Bean/> في XML. حاوية الربيع تعطل مجموعة التعليقات التوضيحية بشكل افتراضي. طريقة تمكينها هي تكوين عنصر <السياق: التعليق التوضيحي/> عنصر في XML.
لكن الربيع يوفر أيضًا خدعة أخرى. باستخدام عنصر <السياق: عنصر مكون/> ، ستعمل حاوية الزنبرك تلقائيًا على الكشف عن الفول دون تحديد عقدة <bean/> بشكل صريح.
يقوم الربيع بتعريف فئة التعليقات التوضيحية من خلال component و repository و service و controller ، بحيث يعرف <سياق: مكون المستحضر/> الفصول التي يجب تسجيلها على أنها سبرينغبيان.
إذا كنت تستخدم حزمة JAR من طرف ثالث وتريد حقن الفصول تلقائيًا في حزمة جرة الطرف الثالث ، حتى لو لم تقم حزمة جرة الجهات الخارجية بتعليقها بالتعليقات التعليقات التوضيحية ، يمكن لعنصر التصفية <السياق: تضمين المرشح> استبدال سياسة المسح الضوئي القائمة على التعليقات ، بحيث تكون <سياق: مكون من مكون/> مسجلات تلقائيًا.
5.4. طريقة عمل الفول وعملية الحياة
(1) scope ("xxxx")
النطاق الافتراضي للفاصوليا التي تم تكوينها بواسطة التعليقات التوضيحية هي Singleton.
الربيع يوفر التعليق التوضيحي scope. عندما يتعلق الأمر بالفئة ، فإن معلمات التعليقات التوضيحية هي نفس قيمة سمة النطاق في XML.
(2) مقارنة أساليب عملية الحياة
| <bean> | التعليقات التوضيحية |
| init-method | postconstruct |
| ميثود القدر | predestroy |
الفرق: يمكن أن تحدد التعليقات التوضيحية طرقًا متعددة في الفصل ، ويتم تنفيذ الأساليب بالترتيب
6. التكوين القائم على جافا
6.1. استخدم فئات Java لتوفير معلومات تعريف الفول
(1) يمكن لـ POJO العادي توفير معلومات تعريف الفول لحاويات الزنبرك طالما تم وضع علامة على شرح التكوين. تعادل كل طريقة تحمل علامة @bean توفير معلومات تعريف الفول.
(2) bean
يتم تحديد نوع الفول بواسطة نوع قيمة الإرجاع للطريقة المشروحة بواسطة bean
الاسم الافتراضي للفول هو نفس اسم الطريقة ، ويمكن أيضًا تحديده بشكل صريح بواسطة bean (name = "xxx").
يمكنك استخدام scope في bean للإشارة إلى نطاق استخدام الفول
(3) التكوين
نظرًا لأن فئة التعليقات التوضيحية configuration نفسها قد تم تمييزها بشروح component ، يمكن تجميع أي فئة مميزة بـ configurstion تلقائيًا إلى فئات أخرى باستخدام autowired.
6.2. ابدأ حاوية الربيع باستخدام معلومات التكوين بناءً على فئة Java
(1) يوفر Spring فئة EanotationConfigPlicationContect ، والتي يمكن أن تبدأ مباشرة حاوية الزنبرك من خلال التعليق التوضيحي لـ Class inconnotated Configuration.
(2) عندما تكون هناك فئات تكوين متعددة
يمكنك تسجيل واحد تلو الآخر من خلال طريقة التسجيل في EnoTationConfigapplicationContect ، ثم استدعاء طريقة التحديث لتحديث الحاوية لتطبيق فئات التكوين المسجلة هذه.
يمكنك أيضًا استخدام التعليق التوضيحي لـ import (xxx.class) لتقديم جميع فئات التكوين الأخرى في فئة تكوين واحدة ، بحيث تحتاج فقط إلى تسجيل فئة تكوين واحدة.
(3) ارجع إلى تكوين التكوين من خلال فئة تكوين XML
<السياق: مكون-scanbase-package = "..." pattern = "اسم فئة التكوين">
(4) معلومات تكوين XML المرجعية في فئة التكوين
استخدم ImporTresource ("classpath: ............") في configuration لاستيراد ملف تكوين XML
6.3. مقارنة بين 3 طرق تكوين
| XML | التعليقات التوضيحية | فئة جافا |
| فئة تنفيذ الفول هي تطوير المشروع الحالي | تحكم في المنطق الكلي لتهيئة الفاصوليا من خلال الكود ، وهو مناسب للسيناريوهات حيث يكون تثبيت الفاصوليا أكثر تعقيدًا |
لخص
ما سبق هو كل التفسير التفصيلي لفاصوليا تجميع الربيع في حاويات IOC. آمل أن يكون ذلك مفيدًا للجميع. يمكن للأصدقاء المهتمين الاستمرار في الرجوع إلى هذا الموقع:
شرح مفصل لطرق تكوين الفاصوليا الثلاثة في الربيع 3.x
مناقشة مختصرة حول الفرق بين نمط الربيع المفرد ونمغليتون
شرح مفصل لدورة حياة استخدام تكوين الربيع
إذا كانت هناك أي أوجه قصور ، فيرجى ترك رسالة لإشارةها. شكرا لك يا أصدقائك لدعمكم لهذا الموقع!