Spring-Integration mit SpringMVC
Die in Spring geladene Bean-Definition wird von der Methode ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory() in der Methode org.springframework.context.ConfigurableApplicationContext#refresh geladen. Diese Methode ruft dann die Methode org.springframework.context.support.AbstractRefreshableApplicationContext#refreshBeanFactory auf, um eine Bean-Factory zu erstellen und die Bean-Definition zu laden. <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>Vom Archetyp erstellte Webanwendung</display-name> <Listener> <listener-Klasse>org.springframework.web.context.ContextLoaderListener</listener-Klasse> </listener> <!-- Spring-Container laden--> <Kontext-Parameter> <param-name>Kontextkonfigurationsstandort</param-name> <param-value>Klassenpfad:spring/applicationContext-*.xml</param-value> </Kontext-Param> <Servlet> <Servlet-Name>MVC-Dispatcher</Servlet-Name> <servlet-Klasse>org.springframework.web.servlet.DispatcherServlet</servlet-Klasse> <!-- Konfigurieren Sie die Konfigurationsdatei, die springMVC laden muss--> <Init-Parameter> <param-name>Kontextkonfigurationsstandort</param-name> <param-value>Klassenpfad:spring/spring-*.xml</param-value> </init-param> </servlet> <Servlet-Zuordnung> <Servlet-Name>MVC-Dispatcher</Servlet-Name> <!-- Stimmt standardmäßig mit allen Anfragen überein --> <URL-Muster>/</URL-Muster> </servlet-mapping> </Web-App> Wenn der Tomcat-Container gestartet wird und über den Pfad auf Ressourcen zugegriffen wird, wird die Methode org.springframework.web.servlet.HttpServletBean#init zum ersten Mal aufgerufen, und nachfolgende HTTP-Anfragen verwenden diese Methodenklasse nicht mehr. HttpServletBean implementiert die Spezifikation der Servlet-Schnittstelle, sodass beim Initialisieren und Ausführen der Browseranforderung über die Servlet-Schnittstelle die in der SpringMVC-Konfiguration definierte Ladeklasse aus dem Spring-Container geladen wird. Spring und SpringMVC sind übergeordnete und untergeordnete Container. Das Folgende ist die Init-Methode von HttpServletBean öffentliche final void init() wirft ServletException { // Bean-Eigenschaften aus Initialisierungsparametern festlegen. PropertyValues pvs = neue ServletConfigPropertyValues(getServletConfig(), this.requiredProperties); wenn (!pvs.isEmpty()) { versuchen { BeanWrapper bw = PropertyAccessorFactory.forBeanPropertyAccess(dies); ResourceLoader resourceLoader = neuer ServletContextResourceLoader(getServletContext()); bw.registerCustomEditor(Resource.class, neuer ResourceEditor(resourceLoader, getEnvironment())); initBeanWrapper(bw); bw.setPropertyValues(pvs, true); } Fang (BeansException Beispiel) { wenn (logger.isErrorEnabled()) { logger.error("Fehler beim Festlegen der Bean-Eigenschaften für Servlet '" + getServletName() + "'", Beispiel); } werfen ex; } } //Schließlich wird die Refresh-Methode des Containers org.springframework.context.ConfigurableApplicationContext#refresh aufgerufen. // Initialisieren Sie den SpringMVC-Container initServletBean(); } } Springboot startet den Container
org.springframework.context.support.AbstractApplicationContext#invokeBeanFactoryPostProcessors-Methode, in der die Bean-Definition über die Klasse ConfigurationClassPostProcessor geladen wird, die die Schnittstelle BeanDefinitionRegistryPostProcessor implementiert, die die Verarbeitung von Bean-Definitionen ermöglicht. // Der BeanDefinitionRegistryPostProcessor im Spring ist eine Unterschnittstelle von BeanFactoryPostProcessor. // Die Funktion von BeanFactoryPostProcessor besteht darin, die Methode postProcessBeanFactory() auszuführen, wenn die Bean-Definitionsinformationen geladen, aber nicht initialisiert wurden. // Der BeanDefinitionRegistryPostProcessor wird vor dem BeanFactoryPostProcessor ausgeführt. Die Ausführungsreihenfolge ist im Quellcode definiert // org.springframework.context.support.PostProcessorRegistrationDelegate#invokeBeanFactoryPostProcessors()-Methode // BeanFactoryPostProcessor ist der Bean-Eigenschaftsverarbeitungscontainer der Bean Factory. Einfach ausgedrückt kann er alle Beandefinition-Daten (nicht instanziiert) in unserer Bean Factory verwalten und Eigenschaften nach Belieben ändern. public void refresh() wirft BeansException, IllegalStateException { synchronisiert (this.startupShutdownMonitor) { Aktualisieren vorbereiten(); //Holen Sie es und weisen Sie die Unterklasse an, die Bean-Factory zu initialisieren, um die Beans in den Cache zu laden. Die Spring MVC-Integration dient hier zum Initialisieren der Bean. ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory(); BeanFactory vorbereiten (BeanFactory); versuchen { postProcessBeanFactory(beanFactory); // Der Springboot-Container beginnt an dieser Stelle mit dem Laden und initialisiert die folgenden Bean-Namen //0 = "org.springframework.context.annotation.internalConfigurationAnnotationProcessor" =》Entsprechende ConfigurationClassPostProcessor-Klasse //1 = "org.springframework.context.annotation.internalAutowiredAnnotationProcessor" =》AutowiredAnnotationBeanPostProcessor //2 = "org.springframework.context.annotation.internalCommonAnnotationProcessor" =》CommonAnnotationBeanPostProcessor //3 = "org.springframework.context.event.internalEventListenerProcessor" = "EventListenerMethodProcessor //4 = "org.springframework.context.event.internalEventListenerFactory" = "DefaultEventListenerFactory // Rufen Sie den Postprozessor unserer Bean Factory auf. Laden Sie die Bean-Definition (keine Instanziierung), laden Sie den Scan-Pfad in der Startklasse über ConfigurationClassPostProcessor // Laden Sie dann den Pfad zur Bean invokeBeanFactoryPostProcessors(beanFactory); registerBeanPostProcessors(beanFactory); initMessageSource(); initApplicationEventMulticaster(); // Diese Methode wird auch von einer Unterklasse von Springboot implementiert, die Tomat auch von dieser Methode aus startet. beiAktualisieren(); registerListeners(); //Instanziieren Sie den Rest unserer Singleton-Beans. beendenBeanFactoryInitialisierung(beanFactory); // Abschließend wird der Container aktualisiert und das Aktualisierungsereignis veröffentlicht (Spring Cloud wird auch von hier aus gestartet) beendenAktualisieren(); } Fang (BeansException Beispiel) { wenn (logger.isWarnEnabled()) { logger.warn("Ausnahme bei Kontextinitialisierung aufgetreten - " + "Aktualisierungsversuch wird abgebrochen: " + Beispiel); } // Zerstören Sie bereits erstellte Singletons, um hängende Ressourcen zu vermeiden. Bohnen zerstören(); // Setzen Sie das Flag „Aktiv“ zurück. AbbrechenAktualisieren(Beispiel); //Ausnahme an Anrufer weiterleiten. werfen ex; } Endlich { // Setzt die allgemeinen Introspektions-Caches im Spring-Kern zurück, da wir // Metadaten für Singleton Beans werden möglicherweise nie mehr benötigt ... : ResetCommonCaches(); } } } Dies ist das Ende dieses Artikels über den Unterschied zwischen dem herkömmlichen Tomcat-Startdienst und dem in Springboot integrierten Tomcat-Startdienst. Weitere Informationen zum Unterschied zwischen dem Tomcat-Startdienst und dem in Springboot integrierten Tomcat-Startdienst finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: PageSpeed Optimierung im Überblick
MySQL verfügt über die folgenden Protokolle: Fehl...
Inhaltsverzeichnis 1. Alles auswählen 2. Erhöhen ...
1. Postgres-Datenbanksicherung in Docker Befehl: ...
Tutorial-Reihe MySQL-Reihe: Grundlegende Konzepte...
Als ich kürzlich an Überwachungsgeräten arbeitete...
Inhaltsverzeichnis 1. Verwendung von Keep-Alive A...
Code kopieren Der Code lautet wie folgt: <meta...
FIFO-Kommunikation (First In First Out) FIFO-Name...
Beim Kompilieren und Installieren von Nginx werde...
Vorwort Der Befehl „Explain“ ist die primäre Mögl...
Ich habe in letzter Zeit viel Wissen und Artikel ...
Einführung: Alle Browser verfügen über Standardst...
Basierend auf Theorien wie Saussures Sprachphilos...
Um das Kursdesign zu realisieren, habe ich kürzli...
Inhaltsverzeichnis Mehrere bedingte Anweisungen M...