Vorwort
In diesem Artikel wird hauptsächlich den relevanten Inhalt zum Laden des Kontextes beim Start des Frühlings eingeführt. Es wird für Ihre Referenz und Ihr Lernen geteilt. Ich werde unten nicht viel sagen. Schauen wir uns die detaillierte Einführung zusammen an.
Test-Quellcode-Download-Test-Annotation.zip
Es gibt den folgenden Code
@ComponentPublic Class HelloWorldService {@Value ("$ {name: world}") privater String -Name; public String gethellomessage () {return "hello" + this.name; }} @ConfigurationPublic class Bootstrap {@Bean public static helloWorldService HelloService () {return New HelloWorldService (); } public static void main (String [] args) {InstantiationStrategy -InstanziationStrategy = new SimpleInstantiationStrategy (); StandardListableBeanFactory beanfactory = new StandardListableBeanFactory (); Beanfactory.setInstantiationStrategy (InstantiationStrategy); AnnotationConfigApplicationContext ApplicationContext = new AnnotationConfigApplicationContext (beanfactory); ApplicationContext.register (Bootstrap.Class); applicationContext.refresh (); HelloWorldService service = applicationContext.getbean (helloWorldService.class); System.out.println (Service.GethElomessage ()); ApplicationContext.close (); }} HelloWorldService.getHelloMessage -Methode gibt einfach den Wert des Namens zurück. BootStrap.main verwendet AnnotationConfigapplicationContext, um ein Kontextobjekt zu konstruieren. Für die Bequemlichkeit der Demonstration haben die angezeigten Deklarationen von Standard -ListableBeanFactory- und Instanziationsstrategy -Instanzen. Holen Sie sich die Referenz der Bean über applicationContext.getbean () und rufen Sie service.getHelloMessage() an.
Das Laden des Kontextes erfolgt hauptsächlich in applicationContext.register und applicationContext.refresh .
Der Zweck der Anwendungscontext.register -Methode besteht darin, ein BeanDefinition -Objekt für den Parameter (mit @Configuration annotiert) zu generieren und DefaultListableBeanFactory.registerBeanDefinition aufzurufen, um die BeanDefinition in die Standard -ListableBeanFactory zu registrieren.
Die Funktion von applicationContext.refresh() ist mehr. Die Hauptfunktion besteht darin, den Postprozessor aufzurufen, um das entsprechende BeanDefinition -Objekt für die @Bean Annotation -Methode in der @Configuration -Klasse zu generieren und es in der Standard -ListableBeanFactory zu registrieren. Die zweite Funktion besteht darin, die BeanDefinition im Standard -ListableBeanFactory zu durchqueren, um das reale Objekt zu generieren.
Der detaillierte Prozess der Generierung eines BeanDefinition -Objekts für die @Bean -Annotationsmethode in der @Configuration -Klasse ist wie folgt
Schritt 1. finden
org.springFramework.context.support.postProcessorregistrationDelegate.invokeBeArtoryPostProcessors () {... // Die anwendbare BeandeFinitionRegistryPostPostProcessor Bean Name String [] postProcessornames = BeanFactory.ChessBeAntype (boandefinitionRogMustionRegy.- und boandefinitionRitionRaynistry. FALSCH); ... // GetPostProcessor basierend auf Beanname, der Beanname der @Configuration Annotation Class ist //org.springFramework.Context.annotation = beanfactory.getbean (postProcessornames [0], BeanDefinitionRegistryPostProcessor.class)}} Schritt 2: Generieren Sie das KonfigurationClass -Objekt für @Configuration
// KonfigurationsclassParser verwenden, um die von @Configuration kommentierte Klasse zu analysieren.
// Jede @Configuration kommentierte Klasse generiert ein KonfigurationClass -Objekt.
// ConfigurationClass.getBeanMethods() kann alle Methoden in dieser Klasse erhalten, die @Bean Annotation verwenden.
// Die @Bean Annotation -Methode wird vom Beanmethod -Objekt dargestellt
org.springFramework.context.annotation.configurationClASSPOSTPROCESSOR.PROCESSCONFIGBEANDEFINITIONS (BeanDefinitionRegistry -Registrierung) {configurationClassparser parsere = neuer KonfigurationClasser (this.MetaReArfactory, this this.comPonentscanbeAnnameGenerator, Registrierung); Parser.Parse (configCandidates); Parser.Validate (); this.Reader.loadbeanDeFinitions (parser.getConfigurationClasses ());};Schritt 3. Die @Bean Annotation -Methode generiert eine BeanDefinition und injiziert sie in die StandardlisteBeanFactory
org.springframework.context.annotation.configurationClassbeandeFinitionReader.loadbeandeFinitionsforBeanMethod (BeanMethod beanmethod) {configurationClassbeanDeFinition beandef = new ConfigurationClassbeanDeFinition (configurationClassbeanDeFinition); Beandef.setbeanClassName (configClass.getmetadata (). getClassName ()); BeanDef.SetFactoryMethodName (metadata.getMethodname ()); // Registrierung ist eine Instanz von StandardlistenablesBeanFactory This.registry.registerBeanDeFinition (Beanname, BeanDeftoregister);}Rufen Sie Stack für dieses Verfahren an:
Generieren Sie den Anrufstapel des Instanzverfahrens gemäß BeanDefinition:
Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Referenzwert für das Studium oder die Arbeit eines jeden hat. Wenn Sie Fragen haben, können Sie eine Nachricht zur Kommunikation überlassen. Vielen Dank für Ihre Unterstützung bei Wulin.com.