Automatisches Montageprinzip von SpringBoot
Automatisches Montageprinzip
pom.xml
Spring-Boot-Abhängigkeiten: Die Kernabhängigkeiten liegen im übergeordneten Projekt!
Wenn wir einige Springboot-Abhängigkeiten schreiben oder schreiben, müssen wir die Version nicht angeben, da es diese Versionslager gibt
SpringBoot verwandelt alle Funktionsszenarien in Starter.
Welche Funktionen wir verwenden möchten, wir müssen nur den richtigen Starter finden. und aktivieren Sie die automatische Konfigurationsfunktion @EnableAutoConfiguration
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency>
Fügen Sie alle in META-INF/spring.factories konfigurierten EnableAutoConfiguration-Werte unter dem Klassenpfad zum Container hinzu
@SpringBootApplication // 标注这个类是一个Springboot的应用 public class SpringbootHelloworldApplication { public static void main(String[] args) { // 将SpringBoot应用启动 SpringApplication.run(SpringbootHelloworldApplication.class, args); } }
Jede davon Die xxxAutoConfiguration-Klassen sind alle Komponenten im Container und werden dem Container hinzugefügt;
Jede automatische Konfigurationsklasse führt automatische Konfigurationsfunktionen aus;
@SpringBootApplication // 加载主配置类 @EnableAutoConfiguration// 开启了自动配置功能 @Import({AutoConfigurationImportSelector.class}) AutoConfigurationImportSelector // 这个新版本的,旧版本是 EnableAutoConfigurationImportSelector - 利用AutoConfigurationImportSelector给容器中导入一些组件 - 可以查看selectImports()方法的内容; - List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);// 获取候选的配置 protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) { List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader()); Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct."); return configurations; } SpringFactoriesLoader.loadFactoryNames() 扫描所有jar包类路径下 META-INF/spring.factories 把扫描到的这些文件的内容包装成List对象 从List中获取到EnableAutoConfiguration.class类(类名)对应的值,然后把他们添加在容器中
@ConditionalOnBean Das angegebene Bean existiert im Container
@ConditionalOnMissingBean Das angegebene Bean existiert nicht im Container;@ConditionalOnExpression erfüllt die SpEL-Ausdrucksspezifikation
@ConditionalOnClass Es gibt die angegebene Klasse im System@ConditionalOnMissingClass Es gibt keine angegebene Klasse im System
@ConditionalOnSingleCandidate Es gibt nur eine Spezifikation in der Container-Bean, oder diese Bean ist die bevorzugte Bean @ConditionalOnProperty Ob die angegebene Eigenschaft im System den angegebenen Wert hat@ConditionalOnResource Ob die angegebene Ressourcendatei vorhanden ist unter dem Klassenpfad
@ConditionalOnWebApplication Es ist derzeit eine Webumgebung@ConditionalOnNotWebApplication Es ist derzeit keine Webumgebung
@ConditionalOnJndi JNDI Es gibt bestimmte Elemente Die automatische Konfigurationsklasse muss unter bestimmten Bedingungen wirksam werden Woher wissen wir? Welche automatischen Konfigurationsklassen werden wirksam? Wir können das Attribut debug=true aktivieren, damit die Konsole den automatischen Konfigurationsbericht ausdruckt, sodass wir leicht erkennen können, welche automatischen Konfigurationsklassen wirksam sindFazit: Alles automatisch Konfigurationen von SpringBoot werden beim Start gescannt und geladen: Alle automatischen Konfigurationsklassen von spring.factories sind hier, sie werden jedoch möglicherweise nicht wirksam. Sie müssen beurteilen, ob die Bedingungen erfüllt sind, solange der entsprechende Starter importiert wird ein entsprechender Launcher Mit dem Launcher wird unsere automatische Konfiguration wirksam und dann ist die Konfiguration erfolgreich! Wenn SpringBoot startet, erhält es den angegebenen Wert von /META-INF/spring.factories im Klassenpfad.
Importieren Sie diese automatisch konfigurierten Klassen in den Container. Die automatische Konfiguration wird wirksam und hilft uns dabei automatische Konfiguration
In der Vergangenheit mussten wir Dinge automatisch konfigurieren, aber jetzt hat SpringBoot das für uns erledigt
Die Integration von JavaEE, Lösungen und automatische Konfigurationsfunktionen sind alle unter spring-boot-autoconfigure-2.4.4 verfügbar .jar-Paket
Es gibt alle Komponenten zurück, die in Form von Klassennamen importiert werden müssen, und diese Komponenten werden dem Spring-Container hinzugefügt
Es werden auch viele XXXAutoConfiguration-Dateien in @Bean vorhanden sein Der Container. Es sind diese Klassen, die dem Container hinzugefügt werden und automatisch konfiguriert werden @Configuration
SpringApplication macht hauptsächlich vier Dinge
Startprinzip SpringApplication.run (Hauptprogrammklasse) neue SpringApplication ( Hauptprogrammklasse)
Bestimmen Sie, ob es sich um eine Webanwendung handelt
Laden und speichern Sie alle ApplicationContextInitializer (META - INF/spring.factories),
Alle ApplicationListener laden und speichern
Holen Sie sich die Hauptprogrammklasse – run()
Rufen Sie den Start zurück
aller SpringApplicationRunListener (META-INF/spring. Fabriken) ApplicationArguments abrufen
Umgebung vorbereiten und alle Listener zurückrufen (SpringApplicationRunListener) EnvironmentPrepared
Bannerinformationen drucken# ?? # Automatische Assemblierung
Spring Boot beginnt mit dem Scannen der in META-INF/spring.factories konfigurierten EnableAutoConfiguration-Komponente aller JAR-Pakete
spring-boot-autoconfigure.jarMETA-INFspring.factories verfügt über die EnableAutoConfiguration-Komponentenkonfiguration, die beim Start geladen werden muss
Sie können dies mithilfe von Debug anzeigen =true in der Konfigurationsdatei Informationen zur aktuell aktivierten Autokonfiguration
Autokonfiguration fügt dem Container eine große Anzahl von Komponenten hinzu
Spring Boot Um eine Funktion auszuführen, müssen Sie die Komponente dieser Funktion aus dem Container abrufen. Wenn nicht, verwenden Sie die automatische Konfiguration, um die Komponenten standardmäßig zu registrieren.
Das obige ist der detaillierte Inhalt vonWas sind die Wissenspunkte des automatischen Assemblierungsprinzips von SpringBoot?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!