مقدمة
تقدم هذه المقالة بشكل أساسي المحتوى ذي الصلة حول تحميل السياق عند بدء الربيع. يتم مشاركته للرجوع إليه وتعلمك. لن أقول الكثير أدناه ، دعنا نلقي نظرة على المقدمة التفصيلية معًا.
اختبار رمز المصدر تنزيل test-annotation.zip
هناك الرمز التالي
ComponentPublic Class HelloWorLdService {value ("$ {name: World}") اسم السلسلة الخاصة ؛ السلسلة العامة gethellomessage () {return "hello" + this.name ؛ }} @configurationpublic class bootstrap {bean public static helloWorldService HelloService () {return new HelloWorLdService () ؛ } public static void main (string [] args) {instantiationStrategy instantiationStrategy = new SimpleInstantiationStrategy () ؛ DefaultListableBeanfactory BeanFactory = جديد defaultListableBeanFactory () ؛ beanfactory.setInstantiationStrategy (instantiationStrategy) ؛ incenotationConfigPlicationContext ApplicationContext = New enronotationConfigapplicationContext (Beanfactory) ؛ ApplicationContext.register (bootstrap.class) ؛ ApplicationContext.refresh () ؛ HelloWorldService service = ApplicationContext.getBean (HelloWorldService.class) ؛ System.out.println (service.gethellomessage ()) ؛ ApplicationContext.close () ؛ }} HelloWorldService.getHelloMessage طريقة ببساطة إرجاع قيمة الاسم. تستخدم طريقة BootStrap.main التعليق التوضيحي configapplicationContext لإنشاء كائن سياق. لراحة المظاهرة ، فإن التصريحات المعروضة من حالات DefaultiLlableBeanfactory و مثيلاتها. احصل على مرجع الفول من خلال ApplicationContext.getBean () واتصل service.getHelloMessage() .
يحدث تحميل السياق بشكل أساسي في طريقة applicationContext.register وطريقة applicationContext.refresh .
الغرض من طريقة ApplicationContext.register هو إنشاء كائن BeanDefinition للمعلمة (الفئة المشروحة باستخدام Configuration) و Call DefaultListableBeanFactory.registerBeanDefinition لتسجيل التعريف الفاصلة في القائمة الافتراضية.
وظيفة applicationContext.refresh() أكثر. تتمثل الوظيفة الرئيسية في استدعاء Postprocessor لإنشاء كائن BeanDefinition المقابل لطريقة التعليقات التوضيحية bean في فئة التكوين وتسجيله في DefaultListableBeanFactory. تتمثل الوظيفة الثانية في اجتياز التعريف الفاصوليات في DefaultListableBeanFactory لإنشاء الكائن الحقيقي.
العملية التفصيلية لإنشاء كائن BeanDefinition لطريقة التعليقات التوضيحية bean في فئة التكوين هي كما يلي
الخطوة 1. ابحث
org.springframework.context.support.postProcessionRegistrationDelegate.invokebeanfactorypostProcsors () {... / /الحصول على beandefintergistrypostprocessprocessorsprocestercessor. ... // getPostProcessor استنادًا إلى Beanname ، اسم beanname لفئة التعليقات التوضيحية configuration هو //org.springframework.context.annotation.internalConfigurationAntAntPurcorsporcessorsporcessorscorscorsporcessorscorscorsporcessor = beanfactory.getBean (postprocessornames [0] ، BeanDefinitionregistryPostProcessor.class)} الخطوة 2: إنشاء كائن configurationClass لتكوين التكوين
// استخدم ConfigurationClassParser لتحليل الفصل المشروع بواسطة configuration ،
// تقوم كل فئة مشروح بالتكوين إلى كائن configurationClass.
// ConfigurationClass.getBeanMethods() يمكن أن تحصل على جميع الطرق في هذه الفئة التي تستخدم التعليقات التوضيحية bean.
// يتم تمثيل طريقة التعليق التوضيحي bean بواسطة كائن Beanmethod
org.springframework.context.annotation.configurationClassPostProcessor.ProcessConfigBeanDefinitions (سجل beandefinitionregistry) this.componentscanbeannameGenerator ، سجل) ؛ parser.parse (configcandidates) ؛ parser.validate () ؛ this.reader.loadbeandefinitions (parser.getConfigurationClasses ()) ؛}
الخطوة 3. تولد طريقة التعليق التوضيحي bean الفاصوليا ويحقنها في defaultlistablebeanfactory
org.springframework.context.annotation.ConfigurationClassBeanDefinitionReader.LoadBeanDefinitionsforbeanmethod (Beanmethod beanmethod) {configurationClassBeanDefinition beandef = configurntclassbeandefinition (configclass) ؛ beandef.setBeanClassName (configclass.getMetAdata (). getClassName ()) ؛ beandef.setFactoryMethodName (metadata.getMethodName ()) ؛ .مكدس الاتصال لهذا الإجراء:
قم بإنشاء مكدس المكالمة لإجراء المثيل وفقًا لـ BeanDefinition:
لخص
ما سبق هو المحتوى الكامل لهذه المقالة. آمل أن يكون لمحتوى هذه المقالة قيمة مرجعية معينة لدراسة أو عمل الجميع. إذا كان لديك أي أسئلة ، فيمكنك ترك رسالة للتواصل. شكرا لك على دعمك إلى wulin.com.