يعد انعكاس التحكم (IoC) وحقن التبعية (DI) مفهومين أساسيين في Spring Framework. تقليديًا، تكون الكائنات مسؤولة عن إنشاء وإدارة تبعياتها الخاصة. ومع ذلك، تقلب IoC هذه المسؤولية عن طريق تسليم التحكم في إنشاء الكائنات وإدارة التبعية إلى إطار عمل مثل Spring.
يوفر هذا التحول العديد من المزايا:
يمكن تنفيذ IoC من خلال آليات مختلفة، بما في ذلك أنماط التصميم مثل نمط المصنع أو نمط الإستراتيجية أو نمط محدد موقع الخدمة. ومع ذلك، فإن الطريقة الأكثر شيوعًا وقوة لتحقيق IoC هي من خلال حقن التبعية.
حقن التبعيات (DI) هو أسلوب يقوم فيه الإطار بحقن التبعيات في كائن بدلاً من الكائن الذي ينشئ التبعيات نفسها. هناك أنواع مختلفة من DI في الربيع:
على سبيل المثال، في فئة خدمة بسيطة، قد ترى شيئًا مثل هذا:
@Service public class OrderService { private final PaymentService paymentService; @Autowired public OrderService(PaymentService paymentService) { this.paymentService = paymentService; } public void processOrder(Order order) { paymentService.processPayment(order.getPaymentDetails()); } }
هنا، يتم إدخال PaymentService في OrderService عبر حقن المنشئ، وهو المفضل بشكل عام لتبعياته الواضحة وسهولة الاختبار.
يوفر Spring حاوية IoC المسؤولة عن إدارة دورة حياة الحبوب (الكائنات التي يديرها Spring). الواجهة الأساسية لهذه الحاوية هي BeanFactory. ومع ذلك، تستخدم معظم التطبيقات ApplicationContext، الذي يمتد إلى BeanFactory ويقدم ميزات إضافية.
// Getting a bean from the ApplicationContext ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); MyBean myBean = context.getBean(MyBean.class);
في هذا المثال، يتم استخدام ApplicationContext لاسترداد حبة. إذا كنت تستخدم BeanFactory أساسيًا، فإنه سيوفر وظائف مماثلة ولكن بدون المزايا الإضافية لـ ApplicationContext.
هناك طريقتان شائعتان للوصول إلى سياق التطبيق الحالي:
Autowired: أدخل سياق التطبيق مباشرة في المكون الخاص بك.
@Autowired private ApplicationContext applicationContext;
ApplicationContextAware: قم بتنفيذ واجهة ApplicationContextAware، والتي تسمح لك باسترداد ApplicationContext حسب الحاجة.
public class MyBean implements ApplicationContextAware { private ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext context) throws BeansException { this.applicationContext = context; } }
عندما يبدأ تطبيق Spring، يتم تنفيذ سلسلة من الخطوات:
متغيرات وخصائص بيئة المعالجة: يتم إنشاء كائن البيئة، مع دمج الإعدادات من application.properties أو application.yml.
إنشاء سياق التطبيق : يتم تحديد نوع سياق التطبيق المناسب وإنشاء مثيل له. على سبيل المثال، قد يستخدم تطبيق Spring Boot AnnotationConfigServletWebServerApplicationContext للتكوينات المستندة إلى Java.
تحميل تعريفات الفول : يقوم الربيع بتحميل تعريفات الفول من مصادر متعددة، مثل الفئات المشروحة، أو فئات @Configuration، أو ملفات XML. يتضمن كل تعريف للفاصوليا معلومات حول نوع الحبة ونطاقها وتبعياتها وعمليات الاسترجاعات الخاصة بدورة الحياة.
Processing BeanFactoryPostProcessors: تقوم هذه المعالجات بتعديل تعريفات الفول قبل إنشاء الفول الفعلي.
تحليل التبعيات وإنشاء الفول : يقوم ApplicationContext بحل التبعيات وإنشاء الحبوب. إذا كانت حبة الفول لديها تبعيات على حبوب أخرى، فسيتم إنشاء هذه التبعيات أولاً.
يدعم Spring نطاقات الفول المختلفة، والتي تحدد دورة حياة الحبة ورؤيتها داخل الحاوية:
@Bean @Scope("prototype") public MyPrototypeBean myPrototypeBean() { return new MyPrototypeBean(); }
في هذا المثال، يتم إنشاء مثيل MyPrototypeBean جديد في كل مرة يتم طلبه من الحاوية.
ضع في اعتبارك سيناريو تعتمد فيه الحبة ذات النطاق المفرد على الحبة ذات النطاق الأولي. عادةً، سيتم إنشاء وحدة النموذج الأولي مرة واحدة فقط أثناء تهيئة الوحدة الفردية. لضمان توفير مثيل جديد لفاصوليا النموذج الأولي في كل مرة، يستخدم Spring كائنات الوكيل.
@Component @Scope(value = "singleton") public class SingletonBean { @Autowired @Scope(value = "prototype", proxyMode = ScopedProxyMode.TARGET_CLASS) private PrototypeBean prototypeBean; public void showMessage() { System.out.println(prototypeBean.getMessage()); } }
هنا، يضمن ScopedProxyMode.TARGET_CLASS إرجاع مثيل PrototypeBean الجديد في كل مرة يتم فيها استدعاء getMessage().
يعد Spring Boot امتدادًا لـ Spring Framework الذي يعمل على تبسيط عملية إعداد وتطوير تطبيقات Spring الجديدة. ويقدم:
يعد التكوين التلقائي ميزة قوية في Spring Boot تقوم بتكوين العديد من الأشياء لك بناءً على التبعيات في مسار الفصل الدراسي الخاص بك. يتم التحكم في ذلك من خلال التعليقات التوضيحية الشرطية مثل:
على سبيل المثال، إذا كان لديك Jackson في مسار الفصل الدراسي الخاص بك، فسيقوم Spring Boot تلقائيًا بتكوين ObjectMapper لتسلسل JSON:
@Configuration @ConditionalOnClass(ObjectMapper.class) public class JacksonAutoConfiguration { // Configuration details... }
إذا كان ObjectMapper موجودًا، فسيتم تطبيق هذا التكوين تلقائيًا. وإلا فسيتم تخطيه.
يمكنك تسجيل التكوينات التلقائية النشطة أثناء بدء التشغيل عن طريق إضافة ما يلي إلى خصائص التطبيق الخاص بك:
logging.level.org.springframework.boot.autoconfigure=DEBUG
سيؤدي هذا إلى إنشاء تقرير مفصل يوضح التكوينات التي تم تطبيقها والتي لم يتم تطبيقها، مما يساعدك على استكشاف أخطاء تكوين التطبيق وإصلاحها أو فهمها.
يعد انعكاس التحكم وحقن التبعية من المفاهيم الأساسية التي تتيح المرونة والنمطية وقابلية الاختبار التي تجعل Spring قويًا للغاية. من خلال فهم كيفية عمل حاوية Spring's IoC، وكيفية إدارة الحبوب، وكيف يعمل Spring Boot على توسيع هذه الإمكانات، يمكنك تطوير تطبيقات قوية وقابلة للصيانة بشكل أكثر كفاءة.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3