1. مقدمة
لقد كنت أدرس حذاء الربيع لفترة من الوقت. سأقوم بتنظيم بحثي ومشاركته معك مؤخرًا. سيكون هناك حوالي 10 إلى 20 مدونة. ستستند السلسلة بأكملها إلى نظام مدونة بسيط ، لأنه ليس من السهل جدًا فهمه فقط من خلال الحديث عن النظرية ، وإذا لم يكن بإمكانك فهم بعض نقاط المعرفة بشكل منهجي في كل مرة من خلال برنامج صغير بسيط ، لذلك بناءً على نظام بسيط ، دعنا نرى كيفية تنفيذ نظام كامل من خلال التمهيد الربيع. بالإضافة إلى نقاط المعرفة الأساسية لـ Spring Boot ، تتضمن هذه السلسلة أيضًا مزيجًا من Boot Spring مع قاعدة البيانات والتخزين المؤقت (Redis) ، وقوائم الرسائل ، وما إلى ذلك ، بالإضافة إلى نشر متعدد الثقافات. يمكن للطلاب المهتمين الانتباه.
2. مقدمة في حذاء الربيع
يمكن رؤية SPRING BOOT من الاسم الذي يعتمد على الربيع ، لذلك يجب على الطلاب الذين ليسوا على دراية بـ Spring أن يتعلموا عن الربيع أولاً. ثانياً ، يساعدنا SPRING Boot في دمج العديد من الوظائف الشائعة الاستخدام ، مما يجعل التكوين بأكمله أكثر بساطة. يجب أن يعلم الطلاب الذين استخدموا Spring أنه على الرغم من أن Spring يعمل بجد لتقليل تعقيد التكوين ، إلا أنه لا يزال من المزعج للغاية تكوين بيئة (ويب) متوفرة بالكامل ، مثل تكوين السجلات ، وقواعد البيانات ، وذاكرة التخزين المؤقت ، وما إلى ذلك ، ثم تكوين Tomcat ، ونشر البرنامج أخيرًا إلى دليل tomcat. لقد تبسيط الحذاء الربيعي هذه العملية بشكل كبير. يوفر العديد من المبتدئين ، فقط قدم حزمة جرة المقابلة. على سبيل المثال ، نحتاج إلى دمج Tomcat ، فقط تقديم بداية Tomcat:
<Rependency> <roupiD> org.springframework.boot </rougiD> <intifactid> Spring-Boot-Starter-Tomcat </shintifactid> </sependency>
ملاحظة: تستند جميع الأمثلة الواردة في هذه المقالة إلى Maven ، لذلك إذا لم تكن على دراية بـ Maven ، فيمكنك أولاً رؤية كيفية استخدامه. إذا كنت على دراية بـ Gradle ، فيمكنك أيضًا إجراء تعديلات مماثلة للتكوين وفقًا للموقف.
يمكننا عرض المبتدئ الذي توفره SPRING BOOT من الوثائق الرسمية:
هنا اعترضت فقط جزءًا صغيرًا ، ويمكنك أن ترى أن Boot Spring يدعم التخزين المؤقت ، ومعالجة الدُفعات ، MQ ، ES ، وما إلى ذلك للحصول على القائمة الكاملة ، راجع الوثائق الرسمية. لن أشرح الكثير. سأشرح وظيفة التمهيد الربيع بأكملها من خلال أمثلة. دعونا نلقي نظرة أولاً على SPRING BOOT لتنفيذ إصدار ويب من Hello World!
3. Hello World Program
3.1 Hello World Source Code
الخطوة 1: استيراد حزمة الجرة
<Arnal> <roupiD> org.springframework.boot </rougiD> <intifactid> spring-boot-starter-parent </shintifactid> <sophy> 1.5.8.Release </splement> </parent> <ependencies> <sperence> <StifactId> Spring-Boot-Starter-Web </stifactid> </reperence> </perendencies>
الخطوة 2: اكتب فئة وحدة التحكم
package com.pandy.blog ؛ استيراد org.springframework.steretype.controller ؛ استيراد org.springframework.web.bind.annotation.requestmapping ؛ استيراد org.springframework.web.bind.annotation.responsebody ؛ class helloWorld { @requestmapping ("/hello") responsebody خريطة عامة <string ، Object> hello () {map <string ، object> map = new hashmap <> () ؛ map.put ("Hello" ، "World") ؛ خريطة العودة }}الخطوة 3: اكتب فئة بدء التشغيل (أدخل المكتبة)
حزمة com.pandy.blog ؛ استيراد org.springframework.boot.springapplication ؛ استيراد org.springframework.boot.autoconfigure.springbootapplication ؛ springbootapplicationpublication class {public static void main (args) throws {springapplication.run (Application.Class) ؛ }}قم بتشغيل الطريقة الرئيسية لهذه الفئة ، ثم قم بزيارة http: // localhost: 8080/hello ، ويمكنك رؤية النتائج التالية:
هل تشعر بالسعادة الشديدة؟ إذا لم يكن لديك سطر واحد من التكوين ، فيمكنك تشغيل تطبيق ويب مباشرة. ولكن هل فكرت يومًا في كيفية تحقيق ذلك بعد أن تكون سعيدًا؟ بعد ذلك ، نقوم بتحليل سطر الكود أعلاه. على الرغم من عدم وجود العديد من الخطوط ، لا يزال هناك العديد من الأشياء التي تستحق التعلم والتفاهم.
3.2 تحليل ملف POM
لنبدأ بملف POM ، والذي يقدم فقط تبعيات في ملف POM. الأول هو الوالد الربيعي. يجب أن يعرف الأصدقاء الذين يعرفون Maven أن Maven يمكن أن يرث أيضًا التكوين من ملف POM الأصل مثل الفصل. يمكننا أن ننظر إلى ملف POM من SPRING-BOOT-Starter-Parent. بسبب مشاكل الفضاء ، ننظر فقط إلى جزأين هنا. أشياء أخرى أسهل في الفهم. يمكنك قراءتها بنفسك. الجزء الأول هو:
يرث هذا الملف ملف POM آخر ، وهو الاعتماد على الربيع. يحتوي هذا الملف فعليًا على الكثير من الجرار ، وتتمثل وظيفته في إدارة إصدار حزمة JAR بشكل موحد. لذلك يمكنك أن ترى لاحقًا أنه عند إدخال الجرار في كل مكون ، ليست هناك حاجة لتحديد رقم الإصدار. نقطة أخرى يجب شرحها هي إدارة ملفات التكوين:
كما ترون ، بشكل افتراضي ، ستتم إضافة الملفات الموجودة في دليل/src/main/الموارد إلى classpath كملفات موارد. بالإضافة إلى ذلك ، يقوم هذا المكان فقط بتصفية الملفات الثلاثة: التطبيق*.YML ، التطبيق*.yaml ، والتطبيق*.properties. ماذا يعني هذا المرشح؟ يجب على أي شخص قام بتكوين Spring MVC أن يعلم أنه عند تكوين قاعدة بيانات ، عادةً ما نقوم بتكوين معلومات قاعدة البيانات في ملف الخصائص ، ثم نقدمها في ملف تكوين الربيع من خلال نموذج <property name = "driverclass value =" $ {jdbc.driver} " />. تتمثل وظيفة هذا المرشح في استبدال أزواج قيمة الاسم التي تم تكوينها في ملف التكوين بأحرف $ {xxx} في ملف تكوين الربيع أثناء التجميع ، ولكن هذه الوظيفة ليست ضرورية. حتى لو لم يتم استبداله ، يمكن لـ Spring قراءة عناصر التكوين في وقت التشغيل.
لتلخيص: دور الربيع-بوت ستارتر-الوالدين:
1) إدارة حزمة جرة.
2) إدارة ملفات التكوين الافتراضية.
3) إدارة المكونات الإضافية المشتركة.
في الواقع ، من تحليل ما ، يمكننا أن نرى أن الوظيفة الأساسية لـ Spring-Boot-Starter-Parent هي إدارة جميع حزم الجرة التي يعتمد عليها Boot Spring. ومع ذلك ، هناك مشكلة واضحة في طريقة الوالدين. لدى العديد من الشركات ملفات أولياء الأمور الخاصة بها ، ولا يمكن لـ Maven تكوين أولياء الأمور المتعددين. ما الذي يجب أن أفعله إذا لم يتم استخدام الوالد النابض النابض؟ هل تحتاج إلى استيراد حزم الجرة واحدة تلو الأخرى؟ في الواقع ، يوفر SPRING BOOT طريقة أخرى لحل هذه المشكلة ، وهي إضافة إدارة التبعية في SPRING BOOT إلى ملف POM الخاص بها:
<RependencyManagement> <Eperenceies> <redence> <roupiD> org.springframework.boot </rougeid> <ArtifactId> عوامل الاضطرابات النابضة </type> <///reperency> </repomency> </version> pom </type> </reperency> </sependency> </sependency> </sependency> </sependency> </perence> </premined> </preminency> </premitted> </perence </reperency> </sependency> </sependency> </sependency> </sependency> </perence> </premined> </preminency> </premitted> </perence </premency> </reperency> </reperency> </respency> </sependency> </reperency> </reperence> </
في الواقع ، من التحليل أعلاه ، يمكننا أن نرى أن هذا هو أيضًا أحد الوالدين لملف POM-POCRENT-BOOT-BOOT-BOOT-BOOT ، ويدير ملف POM هذا بشكل أساسي الكثير من حزم الجرة. لذلك بعد استيراد هذا ، لا تحتاج إلى جرة واحدة تلو الأخرى لاستيرادها. ومع ذلك ، في هذه الحالة ، لن يتم استخدام المكون الإضافي في الوالد النجمي النجوي ، ولم تعد وظيفة استبدال ملفات التكوين الافتراضية متوفرة. ومع ذلك ، هذا ليس له تأثير. من ناحية ، هذه الوظائف ليست ضرورية ، ومن ناحية أخرى ، إذا لزم الأمر ، فمن السهل إضافتها بنفسك.
3.3 تحليل فئة HelloWorld:
دعونا نلقي نظرة على فئة HelloWorld. بعد استخدام SPRING MVC ، يجب أن تعلم أن هذه الفئة ليست مرتبطة بحذاء الربيع ، وأن رمز العمل لا يحتوي على أي شيء يتعلق بـ Spring. هذا أيضًا مبدأ تم الالتزام به دائمًا ، وهو غازي للغاية ، وهو أيضًا سبب رئيسي لنجاح Spring. هناك ثلاثة تعليقات متعلقة بـ Spring في هذا الفصل ، وهي Controller و requestmapping و @ResponseBody ، ولكن يتم توفير هذه التعليقات التوضيحية الثلاثة أيضًا بواسطة Spring MVC. لا يوجد اتصال كبير مع Spring Boot ، لذلك لن أخوض في التفاصيل هنا. إذا لم تكن واضحًا جدًا ، فيمكنك التحقق من محتوى Spring MVC. الوظائف الأساسية للشروح الثلاثة هي كما يلي:
3.4 تحليل فئة التطبيق
أخيرًا ، دعونا نلقي نظرة على فئة التطبيق ، وسوف تجد أن هناك أشياء أقل في هذا الفصل. لا يوجد سوى سطر واحد من التعليمات البرمجية المفيدة في المجموع ، وهو springapplication.run (application.class ، args) ؛ وظيفة هذه الطريقة هي تحميل فئة التطبيق. فهل هناك أي شيء مميز حول فئة التطبيق؟ يمكنك إلقاء نظرة. في الواقع ، فإن الشيء الوحيد الوحيد في هذه الفئة هو التعليق التوضيحي springbootapplication ، وبالتالي يجب أن يكون لتشغيل SPRING BOOT العديد من الاتصالات مع هذا التعليق. يمكننا أن ننظر إلى الكود المصدري لهذا التعليق التوضيحي:
target (elementType.type) retention (attreentionpolicy.runtime)@موثقة@موروثة@springbootConfiguration@enableeautoconfiguration@componentscan (isscleudeFilters = {filtertype (type = filtertype.custom ، classes = typeexclude الفئات = autoConfigurationExCludeFilter.Class)}) public interface springbootapplication {لن أتحدث عن الطريقة الرئيسية لهذا التعليق التوضيحي. يمكنك أن ترى بعد قراءته. هو أساسا توفير الاسم المستعار للشروح المذكورة أعلاه. يجب أن يعلم الجميع أن التعليقات التوضيحية الأربعة الأولى ( @target (elementType.type) ، @repinety (attreencepolicy.runtime) ، documented ، inherited) مذكورة أعلاه. سوف يلقي الأصدقاء الذين ليسوا على دراية به نظرة على كيفية قيام JDK بتنفيذ التعليقات التوضيحية المخصصة. دعنا نوضح التعليقات التوضيحية الثلاثة التالية بالتفصيل: springbootConfiguration ، enableautoconfiguration ، componentscan.
دعنا نلقي نظرة على تكوين SpringBootConfiguration أولاً. هذا التعليقات التوضيحية بسيطة نسبيًا ، والرمز المصدري كما يلي:
@target ({elementType.type})@entry (attreentionpolicy.runtime)@documented@configurationPublic@NINTING SPRINGBOOTCONFIGURINTهذا التعليق التوضيحي يرث فقط التكوين. يجب أن يعلم الجميع أن Spring يوفر ثلاث طرق للتكوين: (1) تكوين ملف XML (2) تكوين التعليقات التوضيحية (3) تكوين فئة Java. configuration هو تعليق توضيحي يستخدم لتحديد فئة كفئة تكوين. بعد ربيع 4 ، يكون التكوين أكثر شعبية في فصول Java ، لذلك يميل Boot Spring أيضًا إلى أن يكون بهذه الطريقة. ومن رمز المصدر ، يمكن ملاحظة أن وظيفة تكوين SpringBootConfiguration هي تحديد الفئة كفئة تكوين.
بعد ذلك ، دعونا نلقي نظرة على توضيح enableautoconfiguration. رمز المصدر لهذا التعليق التوضيحي معقد بعض الشيء. لن أخوض في التفاصيل هنا. سأقوم بتنفيذها في المقالة اللاحقة بالتفصيل. اسمحوا لي أن أتحدث عن وظيفة هذا التعليق التوضيحي. وظيفتها الرئيسية هي تنفيذ التكوين التلقائي. ما هو التكوين التلقائي؟ سيقوم SPRING BOOT ببعض التكوين التلقائي بناءً على حزمة JAR التي قدمتها. على سبيل المثال ، إذا كان هناك جرة HSQLDB في ClassPath ، فسيقوم Spring Boot تلقائيًا بتكوين قاعدة بيانات في الذاكرة لك. في هذا المثال ، يمكننا أيضًا أن نرى أنه نظرًا لأننا قدمنا SPRING-MVC و TOMCAT وغيرها من الجرار ذات الصلة ، فإن BOOT SPRING سيخمن أنك مشروع ويب ، وبعد ذلك ستقوم تلقائيًا بتكوينات MVC Spring تلقائيًا ، مثل دعم الموارد الثابتة ، ودعمها لتحويل النتائج التي تم إرجاعها تلقائيًا إلى بيانات تنسيق JSON ، وما إلى ذلك. هذه هي النتيجة للتكوين التلقائي. يجب أن يكون الطلاب الذين لديهم دراية بـ Spring Conable* التعليقات التوضيحية قادرين على فهم هذا التعليق التوضيحي بسهولة أكبر ، لأن هناك العديد من التعليقات التوضيحية المماثلة في الربيع.
أخيرًا ، دعونا نلقي نظرة على componentscan. لا يتم توفير هذا التعليق التوضيحي بواسطة SPRING BOOT ، ولكن يتم توفيره بحلول الربيع. الحزم أو الفصول التي تم مسحها ضوئيًا بحلول الربيع ، أي ، سيتم تضمين الحزم والفئات تلقائيًا في إدارة حاويات IOC الربيعية. IOC INSTANTIATE هذه الفئات وفقًا للتكوين.
الآن دعونا نلخص وظيفة شرح توضيح SpringBootConfiguration:
1) وضع علامة على أن هذه الفئة هي فئة التكوين.
2) حدد الحزمة الممسوحة ضوئيًا لتسهيل حاويات IOC الربيع لإدارة مثيلها ودورات الحياة.
3) التكوين التلقائي ، واستخدم حزمة JAR المقدمة لتخمين نية المستخدم للتكوين تلقائيًا.
4. ملخص
تحلل هذه المقالة نسخة ويب من Hello World التي تم تنفيذها بواسطة Spring Boot بالتفصيل. من خلال هذا المثال ، نتفهم العمليات الأساسية لحذاء الربيع ، ومن خلال تحليل الكود في كل سطر ، لدينا فهم تقريبي لمبادئ صندوق الربيع. بشكل عام ، يدير Spring Boot حزم الجرة بشكل موحد ، ثم يقوم تلقائيًا بتكوينها وفقًا للبدء الذي نختاره. وبهذه الطريقة ، يحل إدارة التبعية المعقدة وتبسيط التكوين ، بحيث يمكن للمطورين التركيز أكثر على أعمالهم دون الحاجة إلى القيام بأعمال التكوين المعقدة للغاية. في الوقت نفسه ، فإن خدمة Spring Boot السريعة وخفيفة الوزن مناسبة أيضًا لعمارة الخدمات الصغيرة. سأشارك هذا معك إذا أتيحت لك الفرصة للمتابعة. مرحبًا بك لمواصلة المتابعة.