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>
Nach dem Login kopieren
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>
Nach dem Login kopieren
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!