I have posted a lot of Spring Tutorials recently. This post will help you get through Spring interview Questions explaining the core concepts in detail.
إطار الربيع هو واحد من أشهر الإطارات لتطبيقات الويب في Java EE. الحقن التبعي والبرمجة الموجهة للجوانب هما في جوهر إطار الربيع. إذا كنت جيدًا في إطار الربيع، فإن فرص الاختيار تصبح عالية جدًا في مقابلات Java.
نصيحة احترافية: جافا الأساسية هي قاعدة أي إطار يعتمد على جافا، لذا إذا كنت تستعد للمقابلات فالرجاء الاطلاع على مقالات أسئلة مقابلة جافا الأساسية و أسئلة مقابلة جافا.
أسئلة وأجوبة مقابلة الربيع
هنا أقدم تقريبًا 50 سؤالًا لمقابلة الربيع وإجاباتها. تم تحديثه حتى Spring 5، لذا يغطي جميع الميزات الأخيرة مثل Spring WebFlux للبرمجة النشطة.
1. ما هو إطار Spring؟
Spring هو أحد أشهر الأطر الجافا EE المستخدمة على نطاق واسع. يتمحور مفهوم الأساسي لإطار Spring حول “حقن التبعية” و “برمجة الموجهة نحو الجوانب”.
يمكن استخدام إطار Spring في تطبيقات جافا العادية أيضًا لتحقيق فصل فعال بين مكونات مختلفة عن طريق تنفيذ حقن التبعية. يمكننا أداء المهام العابرة مثل تسجيل الدخول والمصادقة باستخدام دعم Spring لبرمجة الموجهة نحو الجوانب.
I like spring because it provides a lot of features and different modules for specific tasks such as Spring MVC and Spring JDBC. Since it’s an open-source framework with a lot of online resources and active community members, working with the Spring framework is easy and fun at the same time.
القراءة الموصى بها: إطار Spring
2. ما هي بعض الميزات الهامة لإطار Spring؟
يعتمد إطار Spring على اثنين من مفاهيم التصميم – حقن التبعية وبرمجة الموجهة نحو الجوانب.
بعض ميزات إطار Spring هي:
- خفيف الوزن ويوجد قليل من العبء عند استخدام إطار لتطويرنا.
- حقن التبعية أو التحكم في التقاطع لكتابة مكونات مستقلة عن بعضها البعض، يعتني حاوية Spring بتوصيلها معًا لتحقيق عملنا.
- حاوية Spring IoC تدير دورة حياة Spring Bean وتكوينات مشروع محددة مثل البحث في JNDI.
- يمكن استخدام إطار Spring MVC لإنشاء تطبيقات الويب وكذلك خدمات الويب القادرة على إرجاع استجابة XML واستجابة JSON.
- الدعم لإدارة المعاملات، وعمليات JDBC، وتحميل الملفات، ومعالجة الاستثناءات، إلخ بواسطة تكوينات قليلة جدًا، إما باستخدام التعليقات أو بواسطة ملف تكوين الفاصل الزمني للربيع.
3. ما هي ميزة استخدام إطار الربيع؟
بعض مزايا استخدام إطار الربيع هي:
- تقليل التبعيات المباشرة بين مكونات مختلفة في التطبيق. يكون حاوية Spring IoC مسؤولة عن تهيئة الموارد أو الحبات وحقنها كتبعيات.
- كتابة حالات اختبار الوحدة سهلة في إطار الربيع لأن منطق الأعمال لدينا ليس له تبعيات مباشرة مع فئات تنفيذ الموارد الفعلية. يمكننا بسهولة كتابة تكوين اختبار وحقن حبات الاختبار الوهمية الخاصة بنا لأغراض الاختبار.
- يقلل كمية الشفرة المتكررة، مثل تهيئة الكائنات، فتح/إغلاق الموارد. أنا أحب فئة JdbcTemplate كثيرًا لأنها تساعدنا في إزالة كل الشفرة المتكررة المرتبطة ببرمجة JDBC.
- Spring الإطار مقسم إلى عدة وحدات، ويساعدنا في جعل تطبيقنا خفيف الوزن. على سبيل المثال، إذا لم نحتاج إلى ميزات إدارة المعاملات في Spring، فلا حاجة لإضافة تلك التبعية إلى مشروعنا.
- Spring الإطار يدعم معظم ميزات Java EE وأكثر. وهو دائما في صدارة التقنيات الجديدة، على سبيل المثال، هناك مشروع Spring لنظام Android لمساعدتنا في كتابة كود أفضل لتطبيقات Android الأصلية. وهذا يجعل إطار الربيع حزمة كاملة ولا حاجة للبحث عن أطُر إطارات مختلفة لمتطلبات مختلفة.
4. ما هي الميزات الهامة في Spring 5؟
Spring 5 هو إعادة هيكلة رئيسية من Spring 4. بعض الميزات الهامة هي:
- دعم لـ Java 8 والإصدارات الأحدث، بحيث يمكننا استخدام تعبيرات اللامبدا.
- دعم لـ Java EE7 ومواصفات Servlet 4.0.
- العمليات على الملفات تتم الآن عبر تدفقات NIO 2، تحسين كبير إذا كان تطبيقك يقوم بالكثير من معالجة الملفات.
- مقدمة spring-jcl لتبسيط تسجيل الأحداث، حيث كانت الأمور معقدة في وقت سابق بسبب عدم وجود نقطة واحدة لأغراض التسجيل.
- دعم لـ Kotlin، Lombok، Reactor 3.1 Flux، و Mono بالإضافة إلى RxJava.
- Spring WebFlux التي تقدم برمجة رد فعلية لـ Spring.
- دعم لـ JUnit 5
- الدعم لتوفير معلومات مكونات الربيع عبر ملف الفهرس “META-INF/spring.components” بدلاً من فحص classpath.
يرجى الاطلاع على ميزات الربيع 5 للحصول على نظرة عامة مفصلة عن هذا الإصدار.
5. ما هو Spring WebFlux؟
Spring WebFlux هو الوحدة الجديدة المقدمة في الربيع 5. يعتبر Spring WebFlux الخطوة الأولى نحو نموذج البرمجة الردّية في إطار الربيع.
يعد Spring WebFlux بديلًا لوحدة Spring MVC. يُستخدم Spring WebFlux لإنشاء تطبيق غير متزامن تمامًا وغير قابل للحظر يعتمد على نموذج تنفيذ دورة الأحداث.
يمكنك قراءة المزيد حول ذلك في دليل Spring WebFlux.
6. ماذا تفهم بحقن الاعتماد؟
نمط تصميم حقن الاعتماد يسمح لنا بإزالة الاعتمادات المُدمجة بشكل صلب وجعل تطبيقنا مرتبطًا بشكل فضفاض وقابلًا للتوسع والصيانة. يمكننا تنفيذ نمط حقن الاعتماد لنقل قرار حل الاعتماد من وقت التجميع إلى وقت التشغيل.
بعض فوائد استخدام حقن الاعتماد هي تفصيل الاهتمامات، وتقليل الشفرة المتكررة، وتكوين المكونات، واختبار الوحدات بسهولة.
اقرأ المزيد في دليل حقن الاعتماد. يمكننا أيضًا استخدام Google Guice لحقن الاعتماد لتوتير عملية حقن الاعتماد. ولكن في معظم الحالات، نبحث عن أكثر من مجرد حقن الاعتماد وهذا هو المكان الذي يأتي فيه الربيع في المقدمة.
7. كيف نقوم بتنفيذ حقن الاعتماد في إطار الربيع؟
يمكننا استخدام تكوين الربيع القائم على XML وأيضًا الاعتماد على التعليقات لتنفيذ حقن الاعتماد في تطبيقات الربيع. لفهم أفضل، يرجى قراءة مثال حقن الاعتماد في الربيع حيث يمكنك التعلم بكلا الطريقتين مع حالة اختبار JUnit. يحتوي المنشور أيضًا على ملف مشروع عينة يمكنك تنزيله وتجربته للمزيد من التعلم.
8. ما هي فوائد استخدام برنامج Spring Tool Suite؟
يمكننا تثبيت الإضافات في Eclipse للحصول على جميع ميزات برنامج Spring Tool Suite. ومع ذلك، يأتي STS مع Eclipse مع بعض الأشياء الهامة الأخرى مثل دعم Maven، قوالب لإنشاء أنواع مختلفة من مشاريع Spring، وخادم tc لأداء أفضل مع تطبيقات Spring.
I like STS because it highlights the Spring components and if you are using AOP pointcuts and advice, then it clearly shows which methods will come under the specific pointcut. So rather than installing everything on our own, I prefer using STS when developing Spring-based applications.
9. اذكر بعض الوحدات المهمة في Spring؟
بعض الوحدات المهمة في إطار Spring هي:
- Spring Context – لحقن الإعتمادات.
- Spring AOP – لبرمجة التوجيهات.
- Spring DAO – لعمليات قاعدة البيانات باستخدام نمط DAO
- Spring JDBC – لدعم JDBC وDataSource.
- Spring ORM – لدعم أدوات ORM مثل Hibernate
- Spring Web Module – لإنشاء تطبيقات ويب.
- Spring MVC – تنفيذ نموذج-عرض-تحكم لإنشاء تطبيقات ويب، وخدمات ويب، وما إلى ذلك.
10. ماذا تفهم ببرمجة التوجه؟
تحتوي التطبيقات الشركية على بعض الاهتمامات المشتركة التي تنطبق على مختلف أنواع الكائنات ووحدات التطبيق، مثل تسجيل الدخول وإدارة المعاملات والتحقق من البيانات والمصادقة، إلخ. يتم تحقيق تجزئة التطبيق بواسطة الفئات في برمجة الكائنات. في برمجة التوجه، يتم تحقيق تجزئة التطبيق من خلال الجوانب ويتم تكوينها للتجاوز بين طرق الفئة المختلفة.
تقوم برمجة التوجه بإزالة التبعية المباشرة للمهام التي تتجاوز الفئات والتي لا يمكن تحقيقها في برمجة الكائنات العادية. على سبيل المثال، يمكننا أن نكون لدينا فئة منفصلة للتسجيل ولكن يتعين على الفئات الأخرى استدعاء هذه الطرق. ومع ذلك، في برمجة التوجه، نقوم بتكوين الجوانب وتنفيذ الطريقة يحدث تلقائيًا. اقرأ المزيد حول دعم Spring AOP في مثال Spring AOP.
11. ما هو الجانب، النصيحة، نقطة القطع، نقطة الالتقاء ووسيط النصيحة في برمجة التوجه؟
الجانب: الجانب هو فئة تنفذ مسائل قطعية، مثل إدارة المعاملات. يمكن أن تكون الجوانب فئة عادية يتم تكوينها ثم تكوينها في ملف تكوين الفاصلة الربيعية أو يمكننا استخدام دعم Spring AspectJ لتعلن فئة كجانب باستخدام التعليق @Aspect
.
النصيحة: النصيحة هي الإجراء المتخذ لنقطة انضمام معينة. من الناحية البرمجية، هي الطرق التي يتم تنفيذها عندما يتم الوصول إلى نقطة انضمام محددة مع نقطة انضمام مطابقة في التطبيق. يمكنك أن تفكر في النصيحة كـ معوقات Spring أو مرشحات Servlet.
النقطة البارزة: نقاط البارزة هي تعابير عادية يتم مطابقتها مع نقاط الانضمام لتحديد ما إذا كان يجب تنفيذ النصيحة أم لا. تستخدم الأطار الربيعي لغة تعبير النقطة البارزة في AspectJ لتحديد نقاط الانضمام حيث ستتم تطبيق طرق النصيحة.
نقطة الانضمام: نقطة انضمام هي نقطة محددة في التطبيق مثل تنفيذ الطريقة، التعامل مع الاستثناء، تغيير قيم المتغيرات الكائن، إلخ. في Spring AOP، تكون نقطة الانضمام دائمًا تنفيذ الطريقة.
مقترحات النصائح: يمكننا تمرير الوسائط في أساليب النصيحة. يمكننا استخدام تعبير args() في نقطة القطع ليتم تطبيقه على أي طريقة تطابق نمط الوسيط. إذا استخدمنا هذا، فعلينا استخدام نفس الاسم في أسلوب النصيحة حيث يتم تحديد نوع الوسيط.
تبدو هذه المفاهيم مربكة في البداية، ولكن إذا تابعت جانب الربيع، مثال النصيحة فإنك يمكنك بسهولة الترابط معها.
12. ما الفرق بين Spring AOP وAspectJ AOP؟
AspectJ هو التنفيذ القياسي لبرمجة موجهة نحو الجوانب بينما ينفذ الربيع AOP لبعض الحالات. الفروق الرئيسية بين Spring AOP و AspectJ هي:
- Spring AOP أسهل في الاستخدام من AspectJ لأننا لا نحتاج للقلق بشأن عملية التنسيق.
- Spring AOP يدعم تعليمات AspectJ، لذا إذا كنت على دراية بـ AspectJ ، فالعمل مع Spring AOP أسهل.
- Spring AOP يدعم فقط AOP القائم على الوكيل، لذا يمكن تطبيقه فقط على نقاط الانضمام لتنفيذ الطريقة. AspectJ يدعم جميع أنواع نقاط القطع.
- أحد نقاط الضعف في Spring AOP هو أنه يمكن تطبيقه فقط على الفول الذي تم إنشاؤه من خلال سياق الربيع.
13. ما هو حاوية Spring IoC؟
إن التحكم في العكس (IoC) هو الآلية التي تحقق الربط الضعيف بين تبعيات الكائنات. لتحقيق الربط الضعيف والربط الديناميكي للكائنات في وقت التنفيذ، تحدد الكائنات تبعياتها التي يتم حقنها بواسطة كائنات المجمع. حاوية Spring IoC هي البرنامج الذي يحقن التبعيات في كائن ويجعله جاهزًا للاستخدام.
تعتبر فئات حاوية Spring Framework IoC جزءًا من org.springframework.beans
و org.springframework.context
وتوفر لنا طرقًا مختلفة لفصل تبعيات الكائنات.
بعض تنفيذات ApplicationContext المفيدة التي نستخدمها؛
- AnnotationConfigApplicationContext: لتطبيقات جافا المستقلة باستخدام تكوين قائم على التعليقات.
- ClassPathXmlApplicationContext: لتطبيقات جافا المستقلة باستخدام تكوين قائم على XML.
- FileSystemXmlApplicationContext: مشابه لـ ClassPathXmlApplicationContext باستثناء أن ملف تكوين XML يمكن تحميله من أي مكان في نظام الملفات.
- AnnotationConfigWebApplicationContext و XmlWebApplicationContext لتطبيقات الويب.
14. ما هو Spring Bean؟
أي صنف جافا عادي يتم تهيئته بواسطة حاوية Spring IoC يُسمى Spring Bean. نستخدم Spring ApplicationContext
للحصول على مثيل Spring Bean.
تدير حاوية Spring IoC دورة حياة Spring Bean، نطاقات الفول، وحقن أي تبعيات مطلوبة في الفول.
15. ما هو أهمية ملف تكوين Spring bean؟
نستخدم ملف تكوين Spring Bean لتعريف جميع الفول التي ستتم تهيئتها بواسطة سياق Spring. عند إنشاء مثيل لمحتوى Spring ApplicationContext، يقوم بقراءة ملف XML للفول الربيع وتهيئة جميعها. بمجرد تهيئة السياق، يمكننا استخدامه للحصول على مثيلات فول مختلفة.
بالإضافة إلى تكوين Spring Bean، يحتوي هذا الملف أيضًا على معترضات Spring MVC، محللات العرض، وعناصر أخرى لدعم التكوينات المستندة إلى التعليقات.
16. ما هي الطرق المختلفة لتكوين فئة كـ Spring Bean؟
هناك ثلاث طرق مختلفة لتكوين Spring Bean.
تكوين XML: هذا هو التكوين الأكثر شيوعًا ويمكننا استخدام عنصر الفئة في ملف السياق لتكوين Spring Bean. على سبيل المثال:
<bean name="myBean" class="com.journaldev.spring.beans.MyBean"></bean>
تكوين بناء على الشفرة في جافا: إذا كنت تستخدم الإشارات فقط ، يمكنك تكوين Spring Bean باستخدام تعليق @Bean
. يُستخدم هذا التعليق مع فئات @Configuration
لتكوين Spring Bean. على سبيل المثال:
@Configuration
@ComponentScan(value="com.journaldev.spring.main")
public class MyConfiguration {
@Bean
public MyService getService(){
return new MyService();
}
}
للحصول على هذا الفئة من سياق الربيع ، يجب أن نستخدم كود الشيفرة التالي:
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(
MyConfiguration.class);
MyService service = ctx.getBean(MyService.class);
تكوين بناء على الإشارات: يمكننا أيضًا استخدام تعليقات @Component، @Service، @Repository و @Controller مع الفئات لتكوينها كـ Spring Bean. لهذه ، سنحتاج إلى توفير موقع الحزمة الأساسي لفحص هذه الفئات. على سبيل المثال:
<context:component-scan base-package="com.journaldev.spring" />
١٧. ما هي نطاقات Spring Bean المختلفة؟
هناك خمسة نطاقات محددة لـ Spring Beans.
- singleton: سيتم إنشاء مثيل واحد فقط من الفاصل لكل حاوية. هذا هو النطاق الافتراضي لفاصلات الربيع. عند استخدام هذا النطاق، تأكد من أن الفاصل لا يحتوي على متغيرات الفاصل المشتركة، وإلا قد يؤدي ذلك إلى مشاكل عدم تماسك البيانات لأنه غير آمن في السياق التعددي للمواضيع.
- prototype: سيتم إنشاء مثيل جديد في كل مرة يُطلب فيها الفاصل.
- request: هذا هو نفس نطاق النموذج، ومع ذلك، يتعين استخدامه في تطبيقات الويب. سيتم إنشاء مثيل جديد من الفاصل لكل طلب HTTP.
- session: سيتم إنشاء فاصل جديد لكل جلسة HTTP من قبل الحاوية.
- global-session: يُستخدم هذا لإنشاء فواصل جلسة عالمية لتطبيقات Portlet.
يمكن توسيع إطار الربيع ويمكننا إنشاء نطاقات خاصة بنا أيضًا. ولكن في معظم الأحيان، نكون راضين عن النطاقات المقدمة من الإطار. لتحديد نطاقات الفاصلات الربيع، يمكننا استخدام السمة “scope” في عنصر الفاصل أو @Scope تعليق لتكوينات قائمة على التعليق.
18. ما هو دورة حياة Spring Bean؟
تتم مباشرة تهيئة Spring Beans من قبل حاوية Spring ويتم أيضًا حقن جميع التبعيات. عندما يتم تدمير السياق، يتم أيضًا تدمير جميع الفول الذي تم تهيئته. يعمل هذا بشكل جيد في معظم الحالات ولكن في بعض الأحيان نرغب في تهيئة موارد أخرى أو القيام ببعض الاختبارات قبل جعل الفول جاهزًا للاستخدام. يقدم إطار Spring دعمًا لطرق ما بعد التهيئة وقبل تدمير الفول في Spring Beans.
يمكننا القيام بذلك بطريقتين – عن طريق تنفيذ واجهتي InitializingBean
و DisposableBean
أو باستخدام init-method و destroy-method في تكوينات فول Spring. لمزيد من التفاصيل، يرجى قراءة أساليب دورة حياة Spring Bean.
19. كيفية الحصول على كائن ServletContext وكائن ServletConfig في Spring Bean؟
هناك طريقتين للحصول على كائنات خاصة بالحاوية في فول Spring.
- تنفيذ واجهات *Aware في Spring، لهذه الواجهات ServletContextAware و ServletConfigAware، لمثال كامل عن هذه الواجهات الواعية، يرجى قراءة واجهات Spring Aware.
- استخدام الإشارة
@Autowired
مع متغير الفاصلة من النوعServletContext
وServletConfig
. سيعملون فقط في بيئات حاويات سيرفلت محددة فقط.
@Autowired
ServletContext servletContext;
20. ما هو توصيل الفاصلة و@Autowired الإشارة؟
عملية حقن تبعيات فول الربيع أثناء التهيئة تُسمى توصيل الفاصلة الربيع.
عادةً ما يُعتبر من الممارسات الجيدة القيام بالتوصيل الصريح لجميع تبعيات الفول، ولكن إطار الربيع يدعم أيضًا التوصيل التلقائي. يمكننا استخدام الإشارة @Autowired
مع الحقول أو الطرق لـ التوصيل تلقائي حسب النوع. ليعمل هذا الإشارة، نحتاج أيضًا إلى تمكين التكوين القائم على التعليق في ملف تكوين فول الربيع. يمكن القيام بذلك عن طريق العنصر context:annotation-config.
لمزيد من التفاصيل حول الإشارة @Autowired
، يرجى قراءة مثال الربيع على التوصيل التلقائي.
٢١. ما هي أنواع التوصيل التلقائي المختلفة لجوانات Spring؟
هناك أربعة أنواع من التوصيل التلقائي في إطار Spring.
- توصيل تلقائي حسب الاسم
- توصيل تلقائي حسب النوع
- توصيل تلقائي بواسطة البناء
- التوصيل التلقائي بواسطة @Autowired و @Qualifier
قبل Spring 3.1، كانت هناك دعم للتوصيل التلقائي بواسطة الكشف التلقائي، وكان مشابهًا للتوصيل التلقائي بواسطة البناء أو حسب النوع. لمزيد من التفاصيل حول هذه الخيارات، يرجى قراءة توصيل التلقائي لجوانات Spring.
٢٢. هل توفر جوانات Spring السلامة في الخيوط؟
نطاق جوانات Spring الافتراضي هو وحيد الاستخدام، لذا سيكون هناك مثيل واحد فقط لكل سياق. وهذا يعني أن وجود متغير على مستوى الفئة يمكن لأي خيط تحديثه سيؤدي إلى بيانات غير متناسقة. وبالتالي، في الوضع الافتراضي، لا توفر جوانات Spring السلامة في الخيوط.
ومع ذلك، يمكننا تغيير نطاق spring bean إلى request أو prototype أو session لتحقيق سلامة التوافق مع التقنية على حساب الأداء. إنها قرار تصميم يعتمد على متطلبات المشروع.
23. ما هو Controller في Spring MVC؟
تمامًا مثل نمط التصميم MVC، فإن Controller هو الفئة التي تتولى رعاية جميع طلبات العميل وترسلها إلى الموارد المكونة للتعامل معها. في Spring MVC، DispatcherServlet هو الفئة المسؤولة عن التحكم الأمامي التي تهيئ السياق بناءً على تكوينات الـ spring beans.
A Controller class is responsible to handle a different kind of client requests based on the request mappings. We can create a controller class by using @Controller annotation. Usually, it’s used with @RequestMapping annotation to define handler methods for specific URI mapping.
24. ما الفرق بين @Component، @Controller، @Repository & @Service في تعليقات Spring؟
@Component تُستخدم للإشارة إلى أن الصف هو مكون. يتم استخدام هذه الفئات للكشف التلقائي وتكوينها كـ Bean عند استخدام التكوينات المعتمدة على التعليمات التوضيحية.
@Controller هو نوع محدد من المكون، يُستخدم في تطبيقات MVC ويُستخدم بشكل أساسي مع تعليمة RequestMapping.
@Repository تُستخدم التعليقات للإشارة إلى أن المكون يتم استخدامه كمخزن وآلية لتخزين / استرداد / البحث عن البيانات. يمكننا تطبيق هذا التعليق مع فئات تنفيذ نمط DAO.
@Service يُستخدم للإشارة إلى أن الصف هو خدمة. عادةً ما تكون الفئات الواجهة التجارية التي توفر بعض الخدمات محددة بعلامة زرقاء.
يمكننا استخدام أي من التعليقات أعلاه لفئة الكشف التلقائي ولكن تُقدم أنواع مختلفة حتى تتمكن بسهولة من تمييز الغرض من الفئات المُحددة بالعلامات.
25. ما هو DispatcherServlet و ContextLoaderListener؟
DispatcherServlet هو المتحكم الأمامي في تطبيق Spring MVC ويقوم بتحميل ملف تكوين حبوب الربيع وتهيئة جميع الحبوب المُكونة. إذا تم تمكين التعليقات، يقوم أيضًا بفحص الحزم وتكوين أي حبة تم تعليقها بتعليقات @Component، @Controller، @Repository، أو @Service.
26. ما هو ViewResolver في Spring؟
تُستخدم تنفيذات ViewResolver لحل صفحات العرض حسب الاسم. نقوم بتكوينها في ملف تكوين حبوب الربيع. على سبيل المثال:
<!-- يحل المشاهد المحددة للتقديم بواسطة @Controllers إلى موارد .jsp في دليل /WEB-INF/views -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
InternalResourceViewResolver هو أحد تنفيذات واجهة ViewResolver، ونحن نقوم بتوفير مسار مجلد صفحات العرض وموقع اللاحقة من خلال خصائص الفاصلة. لذا، إذا قامت طريقة معالج المتحكم بإرجاع “home”، فسيستخدم محلل العرض صفحة العرض الموجودة في /WEB-INF/views/home.jsp.
27. ما هو MultipartResolver ومتى يتم استخدامه؟
واجهة MultipartResolver تُستخدم لتحميل الملفات – CommonsMultipartResolver وStandardServletMultipartResolver هما تنفيذان مقدمان من قبل إطار العمل Spring لتحميل الملفات. بشكل افتراضي، لا توجد محللات متعددة الأجزاء مكونة، ولكن لاستخدامها لتحميل الملفات، كل ما نحتاج إليه هو تعريف حبة بأسم “multipartResolver” بنوع MultipartResolver في تكوينات حبة الربيع.
بمجرد التكوين، سيتم حل أي طلب متعدد الأجزاء بواسطة MultipartResolver المكونة وتمرير HttpServletRequest الملف. ثم يتم استخدامه في فئة المتحكم للحصول على الملف ومعالجته. لمثال كامل، يرجى قراءة مثال تحميل الملفات في Spring MVC.
كيفية التعامل مع الاستثناءات في إطار Spring MVC؟
يوفر إطار Spring MVC الطرق التالية لمساعدتنا في تحقيق التعامل القوي مع الاستثناءات.
التعامل بواسطة المتحكم (Controller-Based) – يمكننا تعريف طرق معالجة الاستثناءات في فئات المتحكم الخاصة بنا. كل ما نحتاج إليه هو تعليق هذه الطرق بتعليق @ExceptionHandler.
معالج الاستثناءات العام (Global Exception Handler) – التعامل مع الاستثناءات هو مسألة عابرة للشرائح ويوفر Spring تعليق @ControllerAdvice الذي يمكننا استخدامه مع أي فئة لتعريف معالج الاستثناء العام الخاص بنا.
تنفيذ معالج استثناءات المعالج (HandlerExceptionResolver implementation) – بالنسبة للاستثناءات العامة، في معظم الأحيان نقدم صفحات ثابتة. يوفر إطار Spring واجهة HandlerExceptionResolver التي يمكننا تنفيذها لإنشاء معالج استثناءات عام. السبب وراء وجود هذه الطريقة الإضافية لتعريف معالج الاستثناء العام هو أن إطار Spring يوفر أيضًا فئات تنفيذ افتراضية يمكننا تعريفها في ملف تكوين حاوية Spring للحصول على فوائد معالجة استثناءات إطار Spring.
لمثال كامل، يرجى قراءة مثال التعامل مع الاستثناءات في الربيع.
29. كيفية إنشاء سياق التطبيق في برنامج جافا؟
هناك طرق التالية لإنشاء سياق الربيع في برنامج جافا منفصل.
- AnnotationConfigApplicationContext: إذا كنا نستخدم الربيع في تطبيقات جافا منفصلة ونستخدم التعليمات البرمجية للتكوين، فيمكننا استخدام هذا لتهيئة الحاوية والحصول على كائنات الفول.
- ClassPathXmlApplicationContext: إذا كان لدينا ملف تكوين فول الربيع XML في تطبيق منفصل، فيمكننا استخدام هذه الفئة لتحميل الملف والحصول على كائن الحاوية.
- FileSystemXmlApplicationContext: هذا مشابه لـ ClassPathXmlApplicationContext باستثناء أنه يمكن تحميل ملف تكوين XML من أي مكان في نظام الملفات.
30. هل يمكننا الحصول على ملفات تكوين الربيع المتعددة؟
لتطبيقات Spring MVC، يمكننا تحديد ملفات تكوين السياق الربيع المتعددة من خلال contextConfigLocation. يمكن أن تتألف سلسلة الموقع هذه من عدة مواقع مفصولة بأي عدد من الفواصل والمسافات. على سبيل المثال؛
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml,/WEB-INF/spring/appServlet/servlet-jdbc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
يمكننا أيضًا تحديد تكوينات الجذر المتعددة وتحميلها من خلال context-param. على سبيل المثال؛
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml /WEB-INF/spring/root-security.xml</param-value>
</context-param>
خيار آخر هو استخدام عنصر الاستيراد في ملف تكوين السياق لاستيراد تكوينات أخرى، على سبيل المثال:
<beans:import resource="spring-jdbc.xml"/>
31. ما هو ContextLoaderListener؟
ContextLoaderListener هو فئة الاستماع المستخدمة لتحميل السياق الجذري وتحديد تكوينات حاوية الربيع التي ستكون مرئية لجميع السياقات الأخرى. يتم تكوينه في ملف web.xml كما يلي:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
32. ما هي التكوينات الدنيا اللازمة لإنشاء تطبيق Spring MVC؟
لإنشاء تطبيق Spring MVC بسيط، سنحتاج إلى إجراء المهام التالية.
- أضف تبعيات spring-context و spring-webmvc في المشروع.
- تكوين
DispatcherServlet
في ملف web.xml لمعالجة الطلبات من خلال حاوية الربيع. - ملف تكوين حاوية الربيع لتعريف الفولت، إذا كنا نستخدم التعليقات التوضيحية فعلينا تكوينها هنا أيضًا. كما نحتاج إلى تكوين مُحلل العرض لصفحات العرض.
- فئة المتحكم مع تعاريف الربط بالطلبات المحددة لمعالجة طلبات العميل.
يجب أن تكون الخطوات أعلاه كافية لإنشاء تطبيق بسيط لتحية العالم باستخدام Spring MVC.
33. كيف يمكنك ربط إطار عمل Spring MVC ببنية MVC؟
كما يوحي الاسم، تم بناء Spring MVC على أساس بنية النموذج-العرض-التحكم. DispatcherServlet
هو المتحكم الأمامي في تطبيق Spring MVC الذي يهتم بجميع الطلبات الواردة ويحيلها إلى طرق معالجة المتحكم المختلفة.
يمكن أن يكون النموذج أي فولت جافا في إطار Spring، تمامًا مثل أي إطار عمل آخر للنموذج-العرض-التحكم يوفر Spring ربطًا تلقائيًا للبيانات بالنماذج الجافا. يمكننا تعيين فولت النموذج كسمات لاستخدامها في صفحات العرض.
يمكن أن تكون صفحات العرض JSP، HTML ثابتة، إلخ. ومُحللو العرض مسؤولون عن العثور على صفحة العرض الصحيحة. بمجرد تحديد صفحة العرض، يُعيد التحكم إلى متحكم DispatcherServlet. المتحكم DispatcherServlet مسؤول عن تقديم العرض وإرجاع الاستجابة النهائية إلى العميل.
34. كيفية تحقيق التوطين في تطبيقات Spring MVC؟
تقدم Spring دعمًا ممتازًا للتوطين أو i18n من خلال حزم الموارد. الخطوات الأساسية المطلوبة لتحقيق توطين تطبيقنا هي:
- إنشاء حزم الموارد للرسائل للغات مختلفة، مثل messages_en.properties، messages_fr.properties، إلخ.
- تعريف جزء messageSource في ملف تكوين الفاصل الربيعي من النوع ResourceBundleMessageSource أو ReloadableResourceBundleMessageSource.
- لدعم تغيير اللغة، قم بتعريف جزء localeResolver من النوع CookieLocaleResolver وتكوين معامل التدخل LocaleChangeInterceptor. يُظهر مثال تكوين كما يلي:
<beans:bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<beans:property name="basename" value="classpath:messages" />
<beans:property name="defaultEncoding" value="UTF-8" />
</beans:bean>
<beans:bean id="localeResolver"
class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
<beans:property name="defaultLocale" value="en" />
<beans:property name="cookieName" value="myAppLocaleCookie"></beans:property>
<beans:property name="cookieMaxAge" value="3600"></beans:property>
</beans:bean>
<interceptors>
<beans:bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<beans:property name="paramName" value="locale" />
</beans:bean>
</interceptors>
- استخدم عنصر
spring:message
في صفحات العرض بأسماء المفاتيح، يختار DispatcherServlet القيمة المقابلة ويقوم بتقديم الصفحة بلغة محلية مقابلة ويعيد كاستجابة.
لمثال كامل، يرجى قراءة مثال توطين Spring.
35. كيف يمكننا استخدام الربيع لإنشاء خدمة ويب ريستفول ترجع استجابة JSON؟
يمكننا استخدام إطار الربيع لإنشاء خدمات ويب ريستفول التي ترجع بيانات JSON. يوفر الربيع تكاملًا مع واجهة برمجة التطبيقات Jackson JSON التي يمكننا استخدامها لإرسال استجابات JSON في خدمة ويب ريستفول.
سنحتاج إلى اتباع الخطوات التالية لتكوين تطبيق Spring MVC الخاص بنا لإرسال استجابة JSON.
1. إضافة تبعيات Jackson JSON، إذا كنت تستخدم Maven يمكن القيام بها باستخدام الكود التالي:
<!-- Jackson -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.databind-version}</version>
</dependency>
2. تكوين تابع RequestMappingHandlerAdapter في ملف تكوين الفاصلة الربيعية وتعيين خاصية المحولات الرسالة إلى تابع MappingJackson2HttpMessageConverter. سيكون التكوين العيني كما يلي:
<!-- تكوين لتوصيل JSON كطلب واستجابة في معالج الطريقة -->
<beans:bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<beans:property name="messageConverters">
<beans:list>
<beans:ref bean="jsonMessageConverter"/>
</beans:list>
</beans:property>
</beans:bean>
<!-- تكوين الفاصلة لتحويل JSON إلى POJO والعكس -->
<beans:bean id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
</beans:bean>
3. في أساليب معالج الوحدة التحكم، قم بإرجاع الكائن كاستجابة باستخدام التعليق @ResponseBody
. الكود العيني:
@RequestMapping(value = EmpRestURIConstants.GET_EMP, method = RequestMethod.GET)
public @ResponseBody Employee getEmployee(@PathVariable("id") int empId) {
logger.info("Start getEmployee. ID="+empId);
return empData.get(empId);
}
4. يمكنك استدعاء خدمة الريست من خلال أي واجهة برمجة التطبيقات، ولكن إذا كنت ترغب في استخدام الربيع يمكنك بسهولة القيام بذلك باستخدام فئة RestTemplate.
لمثال كامل، يرجى قراءة مثال خدمة ويب راحة Spring.
36. ما هي بعض التعليقات المهمة في Spring التي قمت باستخدامها؟
بعض التعليقات في Spring التي قمت باستخدامها في مشروعي هي:
- @Controller – لفئات المتحكم في مشروع Spring MVC.
- @RequestMapping – لتكوين رسم الخريطة URI في طرق معالج المتحكم. هذا تعليق مهم جدًا، لذا يجب عليك الانتقال إلى أمثلة تعليق Spring MVC RequestMapping
- @ResponseBody – لإرسال كائن كاستجابة، عادةً لإرسال بيانات XML أو JSON كاستجابة.
- @PathVariable – لرسم قيم ديناميكية من URI إلى وسيلة معالجة طرق المعالج.
- @Autowired – لتوصيل التبعيات تلقائيًا في فولف الربيع.
- @Qualifier – مع تعليق @Autowired لتجنب الالتباس عند وجود عدة مثيلات من نوع الفولف.
- @Service – لفئات الخدمة.
- @Scope – لتكوين نطاق فولف الربيع.
- @Configuration، @ComponentScan، و @Bean – لتكوينات مبنية على جافا.
- تسميات AspectJ لتكوين الجوانب والنصائح، @Aspect، @Before، @After، @Around، @Pointcut، إلخ.
37. هل يمكننا إرسال كائن كإجابة لطريقة معالج المتحكم؟
نعم يمكننا ذلك، باستخدام التعليق @ResponseBody. هذه هي الطريقة التي نرسل بها استجابة قائمة على JSON أو XML في خدمات الويب الراحية.
38. كيفية تحميل الملفات في تطبيق Spring MVC؟
يوفر Spring دعمًا مدمجًا لتحميل الملفات من خلال تنفيذات واجهة MultipartResolver. من السهل جدًا استخدامها ويتطلب تغييرات في التكوين فقط لجعلها تعمل. سنحتاج إلى كتابة طريقة معالج المتحكم للتعامل مع الملف الوارد ومعالجته. لمثال كامل، يرجى الرجوع إلى مثال تحميل ملف Spring.
39. كيفية التحقق من بيانات النموذج في إطار Spring Web MVC؟
تدعم Spring التحقق القائم على التعليقات المبنية على JSR-303 بالإضافة إلى توفير واجهة Validator يمكننا تنفيذها لإنشاء المحقق المخصص الخاص بنا. لاستخدام التحقق القائم على JSR-303، نحتاج إلى تحديد متغيرات الفول الخاصة بنا بالتحققات المطلوبة.
بالنسبة لتنفيذ المحقق المخصص، نحتاج إلى تكوينه في فئة المتحكم. لمثال كامل، يرجى قراءة مثال التحقق من صحة نموذج Spring MVC.
40. ما هو معالج الطلبات الوسيطة في Spring MVC وكيفية استخدامه؟
معالجات الطلبات الوسيطة في Spring MVC تشبه مرشحات Servlet وتسمح لنا بالتقاط طلبات العميل ومعالجتها. يمكننا التقاط طلبات العميل في ثلاثة أماكن – preHandle، postHandle، و afterCompletion.
يمكننا إنشاء معالج وسيط Spring عن طريق تنفيذ واجهة HandlerInterceptor أو عن طريق تمديد الفئة الكلاسيكية HandlerInterceptorAdapter.
نحتاج إلى تكوين المعترضات في ملف تكوين حاوية الفول الربيع. يمكننا تحديد معترض لالتقاط جميع طلبات العميل أو يمكننا تكوينه لتحديد تعيين URI معين أيضًا. لمثال مفصل ، يرجى الرجوع إلى Spring MVC Interceptor Example.
41. ما هو فئة Spring JdbcTemplate وكيفية استخدامها؟
يوفر إطار العمل Spring تكاملًا ممتازًا مع واجهة برمجة التطبيقات JDBC ويوفر فئة JdbcTemplate كفاءة يمكننا استخدامها لتجنب رموز البناء منطق عمليات قاعدة البيانات مثل فتح/إغلاق الاتصال ، ResultSet ، PreparedStatement الخ.
لمثال على JdbcTemplate ، يرجى الرجوع إلى Spring JDBC Example.
42. كيفية استخدام Tomcat JNDI DataSource في تطبيق ويب Spring؟
لاستخدام حاوية Servlet المكونة DataSource JNDI، نحتاج إلى تكوينها في ملف تكوين حاوية الفاصل الربيع ومن ثم حقنها في حاويات الربيع كتبعيات. بعد ذلك، يمكننا استخدامها مع JdbcTemplate
لأداء عمليات قاعدة البيانات.
<beans:bean id="dbDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<beans:property name="jndiName" value="java:comp/env/jdbc/MyLocalDB"/>
</beans:bean>
لمثال كامل، يرجى الرجوع إلى مثال Spring Tomcat JNDI.
43. كيف يمكن تحقيق إدارة المعاملات في Spring؟
يوفر إطار Spring دعماً لإدارة المعاملات من خلال إدارة المعاملات الشكلية بالإضافة إلى إدارة المعاملات البرمجية. إدارة المعاملات الشكلية هي الأكثر استخدامًا لأنها سهلة الاستخدام وتعمل في معظم الحالات.
نقوم بتحديد طريقة بتعليق @Transactional
لإدارة المعاملات الشكلية. يجب علينا تكوين مدير المعاملات لـ DataSource في ملف تكوين حاوية الربيع.
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
44. ما هو Spring DAO؟
يتم توفير دعم Spring DAO للعمل مع تقنيات الوصول إلى البيانات مثل JDBC وHibernate بطريقة متسقة وسهلة. على سبيل المثال لدينا JdbcDaoSupport، HibernateDaoSupport، JdoDaoSupport و JpaDaoSupport للتقنيات المختلفة.
توفر Spring DAO أيضًا توحيدًا في التسلسل الهرمي للاستثناءات ولا نحتاج إلى التقاط استثناءات محددة.
45. كيفية دمج إطاري Spring وHibernate؟
يمكننا استخدام وحدة Spring ORM لدمج إطاري Spring وHibernate إذا كنت تستخدم Hibernate 3+ حيث يوفر SessionFactory جلسة حالية، فيجب تجنب استخدام فئات HibernateTemplate أو HibernateDaoSupport والأفضل استخدام نمط DAO مع حقن الاعتماد للدمج.
توفر Spring ORM دعمًا لاستخدام إدارة العمليات التجارية الإعلانية لـ Spring ، لذا يجب عليك الاستفادة من ذلك بدلاً من اللجوء إلى كود Hibernate الزائد لإدارة العمليات التجارية.
لفهم أفضل يجب عليك الاطلاع على البرامج التعليمية التالية:
46. ما هو Spring Security؟
يتمحور إطار الأمان في الربيع على توفير كل من المصادقة والتفويض في تطبيقات جافا. كما يعتني بمعظم الثغرات الأمنية الشائعة مثل هجوم CSRF.
من المفيد جدًا وسهل الاستخدام استخدام Spring Security في تطبيقات الويب، من خلال استخدام التعليقات مثل @EnableWebSecurity
. يجب عليك قراءة المنشورات التالية لتعلم كيفية استخدام إطار Spring Security.
47. كيفية حقن java.util.Properties إلى Bean Spring؟
علينا تعريف جسم propertyConfigurer الذي سيقوم بتحميل الخصائص من ملف الخصائص المعطى. ثم يمكننا استخدام دعم Spring EL لحقن الخصائص في تبعيات الحبوب الأخرى. على سبيل المثال:
<bean id="propertyConfigurer"
class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
<property name="location" value="/WEB-INF/application.properties" />
</bean>
<bean class="com.journaldev.spring.EmployeeDaoImpl">
<property name="maxReadResults" value="${results.read.max}"/>
</bean>
إذا كنت تستخدم التعليق لتكوين فول الربيع، يمكنك حقن الخاصية كما هو موضح أدناه.
@Value("${maxReadResults}")
private int maxReadResults;
48. عطل بعض أنماط التصميم المستخدمة في إطار الربيع؟
إطار الربيع يستخدم العديد من أنماط التصميم، وبعض الأنماط الشائعة تشمل:
- نمط الفرد: إنشاء فول الافتراضي.
- نمط المصنع: فئات مصنع الفول
- نمط النموذج: نطاقات فول
- نمط المحول: Spring Web و Spring MVC
- نمط الوكيل: دعم برمجة الجوانب في الربيع
- نمط طريقة القالب: JdbcTemplate، HibernateTemplate، إلخ
- Front Controller: Spring MVC DispatcherServlet
- كائن الوصول إلى البيانات: دعم Spring DAO
- حقن الاعتمادات وبرمجة التوجيه الموجهة نحو الجوانب
49. ما هي بعض الممارسات الأفضل لإطار الربيع؟
بعض الممارسات الأفضل لإطار الربيع هي:
- تجنب أرقام الإصدار في مرجع النموذج، للتأكد من أن لدينا أحدث التكوينات.
- قسم تكوينات الفول الربيع بناءً على اهتماماتها مثل spring-jdbc.xml، spring-security.xml.
- بالنسبة لفول الربيع التي تُستخدم في سياقات متعددة في Spring MVC، قم بإنشائها في السياق الجذري وقم بتهيئتها باستماع.
- قم بتكوين تبعيات الفول بقدر الإمكان، حاول تجنب السلك بالشكل الآلي قدر الإمكان.
- بالنسبة لخصائص مستوى التطبيق، النهج الأفضل هو إنشاء ملف خصائص وقراءته في ملف تكوين فول الربيع.
- بالنسبة للتطبيقات الأصغر حجمًا، تكون التعليقات مفيدة ولكن بالنسبة للتطبيقات الأكبر حجمًا، قد تصبح التعليقات مزعجة. إذا كان لدينا كل التكوين في ملفات XML، فإن الحفاظ عليه سيكون أسهل.
- @خدمة تستخدم للخدمات و@مستودع للبنات DAO.
- إطار الربيع يحتوي على العديد من الوحدات، استخدم ما تحتاجه. قم بإزالة جميع التبعيات الإضافية التي عادة ما تضاف عند إنشاء المشاريع من خلال قوالب أدوات الربيع.
- إذا كنت تستخدم جوانب، تأكد من تقديم نقطة الانضمام بأقصى قدر ممكن لتجنب النصائح بالطرق غير المرغوب فيها. اعتبر الإشارات المخصصة التي تسهل الاستخدام وتجنب أي مشاكل.
- استخدم حقن الاعتماد عندما يكون هناك فائدة فعلية، لا تستخدمه فقط من أجل الفصل الفعلي، لا تستخدمه لأنه من الصعب الصيانة.
50. ما هو تشغيل الربيع؟
تجعل Spring Boot إطار Spring فريدًا. يوفر لنا طريقة سهلة لإنشاء أنواع مختلفة من تطبيقات Java وربطها ببيئة تشغيل سيرفلت كونتينر. لذلك نحصل على ملف JAR واحد يمكننا تشغيله لتنفيذ المشروع. يوفر لنا هذا الكثير من الوقت في الحصول على مشروع الهيكل العظمي الذي يكون جاهزًا للنشر بسرعة كبيرة. بهذه الطريقة يمكننا التركيز أكثر على المنطق التجاري بدلاً من المضي قدمًا في العملية الشائعة لبناء الكود، ثم نشره على سيرفلت كونتينر. نظرًا لأنها موضوع شامل للغاية، أود أن أقترح عليك الانتقال إلى أسئلة مقابلة Spring Boot.
هذا كل شيء بالنسبة لأسئلة مقابلة إطار Spring. آمل أن تساعدك هذه الأسئلة في مقابلة Java EE القادمة. سأواصل إضافة المزيد من الأسئلة إلى القائمة بمجرد العثور عليها. إذا كنت تعرف المزيد من الأسئلة التي يجب أن تكون جزءًا من القائمة، فتأكد من إضافة تعليق لها وسأقوم بتضمينها.
Source:
https://www.digitalocean.com/community/tutorials/spring-interview-questions-and-answers