Spring Start bestimmt automatisch die Implementierung des Anwendungskontexts
beim Aufrufen von ermittelt Spring Start automatisch die korrekte Anwendungscontext -Implementierung gemäß den folgenden Faktoren
SpringApplication.run(MySpringBootApp.class, args);
Klassenpfad (Abhängigkeiten im Projekt)
Ausführen von Anwendungstypen (Web oder Nicht -Web)
-
OK Prozess
SpringApplication intern verwenden die folgende Logik, um den entsprechenden ApplicationContext auszuwählen: -
Wenn Spring MVC oder Spring WebFlux (Spring-Boot-Starter-Web oder Spring-Boot-Starter-Webflux):
Initialisiert einen webbasierten Anwendungskontext
:
- basierend auf dem Service (Spring-Boot-Starter-Web):
→ (Spring-MVC-Anwendungen für eingebettete Tomcat, Steg oder Summe).
reagieren (Spring-Boot-Starter-Webflux): → - (für Webflux-Anwendungen).
-
Wenn es weder Spring-Boot-Starter-Web noch Spring-Boot-Starter-Gewicht gibt:
AnnotationConfigServletWebServerApplicationContext
- Initialisiert eine -Web -Anwendung über und unter : →
AnnotationConfigReactiveWebServerApplicationContext
.
-
Webanwendungskontext als Beispiele
Wenn es Spring-Boot-Starter-Web enthält, ist die Ausgabe:
-
Beispiele für Nicht -Web -Anwendungskontext
AnnotationConfigApplicationContext
Wenn Sie den Feder-Boot-Starter-Web entfernen, wird der Ausgang:
Die Bedeutung der Initialisierung des Anwendungskontexts
Anwendung unten
<code class="language-java">@SpringBootApplication
public class WebApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(WebApplication.class, args);
System.out.println("Context Type: " + context.getClass().getName());
}
}</code>
ist
Core Container
, sie verwaltet den Lebenszyklus und die Konfiguration von Bean in der Spring -Boot -Anwendung. Die Initialisierung ist aus folgenden Gründen wichtig:
<code>Context Type: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext</code>
1. Bean Management
- Anwendungskontext Registrierungs- und Verwaltungsbean , sodass Abhängigkeitsinjektion (
@Autowired
).
- Ohne Anwendungskontext weiß der Spring nicht, wie abhängig ist und Abhängigkeiten injiziert werden.
2. Automatische Konfiguration
- Der Mechanismus
@EnableAutoConfiguration
hängt vom Anwendungskontext ab.
scannen Sie den Pfad und konfigurieren Sie die Federkomponente - gemäß den Abhängigkeiten.
3. Lebenszyklus und Eventmanagement
Anwendungskontext veröffentlicht das Lebenszyklusereignis (
, - ).
ApplicationReadyEvent
ApplicationStartedEvent
es hört das Abschaltsignal und verwaltet die Ressource korrekt.
-
4. Embedded Web Server Support
Für Webanwendungen startet der Anwendungskontext
eingebetteter Server - (Tomcat, Jetty, Totow).
Ohne es kann Feder Boot
HTTP -Anforderung - nicht verarbeiten.
5. Umgebung und Attributmanagement
Kontext aus oder
laden - Konfigurationsattribut
application.properties
. application.yml
Es verwaltet Konfigurationsdateien () und Einstellungen, die für die Umgebung spezifisch sind.
-
@Profile
Die tatsächlichen Auswirkungen des korrekten Anwendungskontexts
Auswählen der richtigen Anwendung oben und unten wirkt sich das Verhalten von
Anwendung
wie folgt aus:
1. Bestimmen Sie, ob Sie den eingebetteten Webserver starten
- Wenn Sie den falschen Kontext auswählen, kann Ihre Anwendung möglicherweise nicht als Webanwendung starten.
Webanwendung erfordert - , sie führt Tomcat/Jetty.
AnnotationConfigServletWebServerApplicationContext
2. Kontrollkomponenten Scannen und Abhängigkeitsinjektion
Der Kontext wird von den Abhängigkeiten innerhalb seines Bereichs initialisiert und injiziert. -
Zum Beispiel wird der Nicht -Web -Kontext - den Controller nicht scannen oder initialisieren ( funktioniert nicht).
@RestController
3.. Aktivieren oder deaktivieren automatische Konfiguration
Spring Boot basierend auf dem ausgewählten Kontext - automatische Anwendungskonfiguration .
zum Beispiel: Wenn der Webkontext ausgewählt ist, konfiguriert der Spring -Boot die - MVC -Komponente automatisch.
4. Beeinflussen die Verwaltung und Lademethode von Bean
Web -Kontext vor dem konfigurierten
, es wird mit der HTTP -Anforderung behandelt. -
DispatcherServlet
Nicht -Web -Kontext hat nicht, was bedeutet, dass Wenn keine zusätzliche Konfiguration vorliegt, können Sie die Webanforderung - nicht verarbeiten.
Zusammenfassung
---
Die letzte Idee
方面 |
Application Context 的影响 |
Bean 管理 |
初始化和管理依赖项 (`@Autowired`) |
Web 服务器 |
启动嵌入式 Tomcat/Jetty(如果为 Web 上下文) |
自动配置 |
根据类路径应用自动配置 |
生命周期管理 |
处理启动/关机事件 |
配置文件和环境 |
加载属性,管理配置文件 (`@Profile`) |
依赖注入范围 |
确定哪些 Bean 和控制器可用 |
Spring Start wählt automatisch die richtige Anwendung oben und unten gemäß dem Klassenpfad
aus.
Webanwendung muss auf dem Kontext von Web (- ) basieren.
Nicht -Web -Anwendung
Der Standard -Basis -Kontext mit Standard (- ).
Der korrekte Kontext der Initialisierung
AnnotationConfigServletWebServerApplicationContext
Gewährleisten Sie die korrekte Abhängigkeitsinjektion, automatische Konfiguration und Lebenszyklusmanagement. ?
-
Das obige ist der detaillierte Inhalt vonSpring-: Howspring-Stiefeldermine-Anwendungskontext. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Stellungnahme:Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn