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
Umweltvorbereitung: Stellen Sie lnmp auf einem Ho...
Als ich kürzlich eine Schnittstelle zeichnete, st...
1: Überprüfen Sie die PHP-Version nach dem Aufruf...
Vorwort Durch meine vorherige Tomcat-Artikelserie...
Netzwerksicherheit ist ein sehr wichtiges Thema u...
Detaillierte Erklärung und Beispiele zur Passwort...
System: Ubuntu 16.04LTS 1\Laden Sie mysql-5.7.18-...
Starten Sie alle gestoppten Docker-Container mit ...
Inhaltsverzeichnis Überblick 1. So animieren Sie ...
Vor kurzem musste ich alle Felder einer verknüpft...
In diesem Artikel wird der spezifische Code des W...
1. Öffnen Sie die virtuelle CentOS 7-Maschine. 2....
Inhaltsverzeichnis Vorwort 1. JDBC-Timeout-Einste...
Experimentelle Umgebung: 1. Drei CentOS 7-Server ...
glibc ist die von GNU veröffentlichte libc-Biblio...