# سبرينج بوت (برمجية)

سبرينج بوت (بالإنجليزية: Spring Boot) إطار عمل مفتوح المصدر في لغة Java يستخدم لبرمجة التطبيقات المستقلة عالية الجودة مع مجموعة من المكتبات التي تسهل بدء تشغيل المشروع وإدارته. وهو امتداد للاتفاقية على التكوين لمنصة سبرينج جافا يهدف إلى تقليل مخاوف التكوين أثناء إنشاء تطبيقات تعتمد على سبرينج.
لا يزال من الممكن تعديل التطبيق لتلبية احتياجات محددة، ولكن مشروع سبرينج بوت الأولي يوفر "عرضًا محددًا" مُهيأ مسبقًا لأفضل تكوين يمكن استخدامه مع منصة سبرينج ومكتبات الطرف الثالث المحددة.
يمكن استخدام سبرينج بوت لتطوير الخدمات المصغرة، تطبيقات الويب، وتطبيقات وحدة التحكم.

## الميزات

* خادم تطبيقات الويب المضمن Tomcat أو Jetty أو Undertow.
* توفير نماذج كائنات المشروع "المبتدئة" (POMs) ذات الرأي لأداة البناء. أدوات البناء الوحيدة المدعومة هي Maven و Gradle .
* التكوين التلقائي لتطبيق Spring.
* توفير وظائف جاهزة للإنتاج مثل المقاييس ، وفحوصات الحالة، والتكوين الخارجي.
* لا يتطلب الأمر إنشاء أي كود .
* لا يلزم تكوين XML .
* دعم اختياري لـ Kotlin وApache Groovy بالإضافة إلى Java.

## تمهيد DispatcherServlet

لا يحتاج Spring Boot إلى تكوين `DispatcherServlet` يدويًا، حيث يقوم بتكوين التطبيق تلقائيًا بناءً على الإعدادات التي يكتشفها. هذا يجعل عملية إعداد التطبيق أسهل وأسرع، حيث يعالج Spring Boot العديد من التفاصيل تلقائيًا دون الحاجة لتدخل المطور.

### مُهيئ SpringBootServlet

تحتوي Spring Boot على فئة تُدعى `SpringBootServletInitializer`، وهي تعتبر تخصصًا لـ `WebApplicationInitializer`. هذه الفئة توفر تنفيذًا جاهزًا للاستخدام لـ `WebApplicationInitializer`، مما يعني أن المطور ليس بحاجة لإنشاء تنفيذ خاص به لهذه الفئة.
ببساطة، `SpringBootServletInitializer` تسهل على المطورين إعداد تطبيقاتهم لتعمل داخل حاويات السيرفر مثل Tomcat أو Jetty دون الحاجة إلى إعدادات معقدة. توفر هذه الفئة الأساسيات اللازمة لتكوين التطبيق بشكل صحيح.

## خصائص التكوين

يمكن تحديد خصائص التكوين لتطبيق Spring Boot في ملفي `application.properties` أو `application.yml`. من بين الخصائص التي يمكن تضمينها في هذه الملفات، هناك مثالان مهمان هما `server.port` و `spring.application.name`.
- **server.port**: يحدد رقم المنفذ الذي سيستمع عليه التطبيق.
- **spring.application.name**: يحدد اسم التطبيق، والذي يمكن استخدامه في التهيئات أو المراقبة.
هذا النظام يسمح بمرونة كبيرة في تخصيص إعدادات التطبيق بسهولة.

## التكوين التلقائي
### @تطبيق SpringBoot

يتضمن Spring Boot تعليقًا توضيحيًا يُعرف بـ `@SpringBootApplication`، والذي يُمكن التطبيق من تكوين مكتبات الطرف الثالث والميزات المتاحة في `classpath` تلقائيًا.
على سبيل المثال، إذا كانت هناك فئة تحتوي على التعليق التوضيحي `@SpringBootApplication`، يمكنها توسيع فئة `SpringBootServletInitializer`، مما يُتيح لها إمكانية تشغيل التطبيق كملف WAR عند نشره. هذا يسهل عملية إعداد التطبيقات ويوفر الكثير من الوقت والجهد في تكوين الإعدادات المطلوبة.
يعتبر الشرح `@SpringBootApplication` تجميعًا لثلاثة شروحات رئيسية في Spring:
1. **@SpringBootConfiguration**: تشير إلى أن الفئة تحتوي على إعدادات التكوين لتطبيق Spring Boot، مما يسمح بتعريف Beans والإعدادات الخاصة بالتطبيق.
2. **@EnableAutoConfiguration**: تُمكِّن Spring Boot من تكوين التطبيق تلقائيًا بناءً على المكتبات المتاحة في `classpath`، مما يساعد على تسريع عملية الإعداد وتجنب التكوين اليدوي.
3. **@ComponentScan**: يقوم بمسح الحزم بحثًا عن المكونات (components) الأخرى، مما يتيح Spring اكتشاف Beans وتسجيلها تلقائيًا في سياق التطبيق.
هذا التجميع يُبسط عملية تكوين التطبيقات ويسهل إعدادها وتشغيلها.

#### @تكوين SpringBoot

تعليق @SpringBootConfiguration هو تخصص لتعليق @Configuration الخاص بـ Spring. تم وضع علامة على الفئة التي تحتوي على @SpringBootConfiguration باعتبارها فئة التكوين لتطبيق Spring Boot.

#### @تمكين التكوين التلقائي

تعليق @EnableAutoConfiguration هو تعليق خاص بـ Spring يمكّن التكوين التلقائي لـ Spring Boot.

## المحرك

يحتوي Spring Boot على عدد من وحدات Spring Framework الموجودة، مما يجعله إطار عمل قويًا لتطوير التطبيقات. تشمل هذه الوحدات:
1. **Spring Core**: يوفر الأساس لإدارة Beans والتحكم في الاعتماديات (Dependency Injection).
2. **Spring MVC**: يتيح تطوير تطبيقات الويب باستخدام نمط Model-View-Controller.
3. **Spring Data**: يسهل التعامل مع قواعد البيانات عن طريق توفير واجهات بسيطة للتفاعل مع البيانات.
4. **Spring Security**: يوفر آليات أمان متعددة لتأمين التطبيقات، مثل المصادقة وتفويض الوصول.
5. **Spring AOP**: يدعم البرمجة الموجهة للجوانب، مما يساعد في فصل الجوانب الثانوية مثل السجل (logging) والتحكم في المعاملات.
تسمح هذه الوحدات لتطبيقات Spring Boot بالاستفادة من الميزات المختلفة لـ Spring Framework، مما يُعزز من كفاءتها ومرونتها.

## التكامل مع وحدات Spring Framework

يحتوي Spring Boot على عدد من وحدات Spring Framework الموجودة.

### الأمن الربيعي

يتكامل Spring Boot مع Spring Security Module. الطريقة الأبسط لدمج Spring Boot مع Spring Security هي إعلان التبعية المبدئية في ملف تكوين البناء.
إذا تم استخدام Maven كأداة بناء، فيمكن تحديد التبعية ذات معرف القطعة spring-boot-starter-security في ملف تكوين pom.xml .

## خوادم التطبيقات

بشكل افتراضي، يوفر Spring boot خوادم ويب مضمنة (مثل TomCat) جاهزة للاستخدام. ومع ذلك، يمكن أيضًا نشر Spring Boot كملف WAR على خادم تطبيقات WildFly مستقل.
إذا تم استخدام Maven كأداة بناء، فهناك wildfly-maven-plugin plugin يسمح بالنشر التلقائي لملف WAR الناتج.