Heim Java javaLernprogramm Was sind die Wissenspunkte des automatischen Assemblierungsprinzips von SpringBoot?

Was sind die Wissenspunkte des automatischen Assemblierungsprinzips von SpringBoot?

May 15, 2023 am 08:01 AM
springboot

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

  • Zum Beispiel: spring-boot-starter-web, es hilft uns, alle Abhängigkeiten der Webumgebung automatisch zu importieren!

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

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);
    }

}
Nach dem Login kopieren

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类(类名)对应的值,然后把他们添加在容器中
Nach dem Login kopieren
: Bestimmen Sie, ob diese Konfiguration erfolgt Wird die Klasse basierend auf unterschiedlichen aktuellen Bedingungen wirksam?

Sobald diese Konfigurationsklasse wirksam wird, werden die Eigenschaften dieser Komponenten aus den entsprechenden Eigenschaftenklassen abgerufen, und jede Eigenschaft in diesen Klassen ist an die Konfigurationsdatei gebunden;

5) Alle Eigenschaften, die in der Konfigurationsdatei konfiguriert werden können, sind in der Klasse xxxxProperties gekapselt. Was in der Konfigurationsdatei konfiguriert werden kann, kann sich auf die Eigenschaftsklasse beziehen, die einer bestimmten Funktion entspricht ;

Komponenten zum Container hinzufügen

xxxxEigenschaften: Relevante Eigenschaften in der Konfigurationsdatei kapseln;

@Bedingte abgeleitete Annotation (native @Conditional-Funktion der Spring-Annotation)

Funktion: Muss @ sein, nur wenn die Bedingungen angegeben sind Wenn die Bedingung erfüllt ist, werden Komponenten zum Container hinzugefügt und alle Inhalte in der Konfigurationskonfiguration werden wirksam System erfüllt die Anforderungen

@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 sind

Fazit: 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

    Mit der automatischen Konfigurationsklasse ersparen wir uns die Arbeit, Konfigurationsdateien manuell zu schreiben!
  1. Stalk über Ihr Verständnis von Springboot
  2. auto-Assembly
  3. springApplication Run
  4. 1 und laden Sie alle verfügbaren Initialisierer, indem Sie sie auf das Attribut „initializers“ setzen Hauptklasse

  5. SpringApplication macht hauptsächlich vier Dinge

  6. 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!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie Springboot Jasypt integriert, um die Verschlüsselung von Konfigurationsdateien zu implementieren Wie Springboot Jasypt integriert, um die Verschlüsselung von Konfigurationsdateien zu implementieren Jun 01, 2023 am 08:55 AM

Einführung in Jasypt Jasypt ist eine Java-Bibliothek, die es einem Entwickler ermöglicht, seinem Projekt mit minimalem Aufwand grundlegende Verschlüsselungsfunktionen hinzuzufügen und kein tiefes Verständnis der Funktionsweise der Verschlüsselung erfordert. standardbasierte Verschlüsselungstechnologie. Passwörter, Text, Zahlen, Binärdateien verschlüsseln ... Geeignet für die Integration in Spring-basierte Anwendungen, offene API, zur Verwendung mit jedem JCE-Anbieter ... Fügen Sie die folgende Abhängigkeit hinzu: com.github.ulisesbocchiojasypt-spring-boot-starter2 Die Vorteile von Jasypt schützen unsere Systemsicherheit. Selbst wenn der Code durchgesickert ist, kann die Datenquelle garantiert werden.

Wie SpringBoot Redisson integriert, um eine Verzögerungswarteschlange zu implementieren Wie SpringBoot Redisson integriert, um eine Verzögerungswarteschlange zu implementieren May 30, 2023 pm 02:40 PM

Nutzungsszenario 1. Die Bestellung wurde erfolgreich aufgegeben, die Zahlung erfolgte jedoch nicht innerhalb von 30 Minuten. Die Zahlung ist abgelaufen und die Bestellung wurde automatisch storniert. 2. Die Bestellung wurde unterzeichnet und es wurde 7 Tage lang keine Bewertung durchgeführt. Wenn die Bestellung abläuft und nicht ausgewertet wird, wird die Bestellung standardmäßig positiv bewertet. Wenn der Händler die Bestellung innerhalb von 5 Minuten nicht erhält, wird die Bestellung abgebrochen Es wird eine SMS-Erinnerung gesendet ... Für Szenarien mit langen Verzögerungen und geringer Echtzeitleistung können wir die Aufgabenplanung verwenden, um eine regelmäßige Abfrageverarbeitung durchzuführen. Zum Beispiel: xxl-job Heute werden wir auswählen

So implementieren Sie verteilte Sperren mit Redis in SpringBoot So implementieren Sie verteilte Sperren mit Redis in SpringBoot Jun 03, 2023 am 08:16 AM

1. Redis implementiert das Prinzip der verteilten Sperren und warum verteilte Sperren erforderlich sind. Bevor über verteilte Sperren gesprochen wird, muss erläutert werden, warum verteilte Sperren erforderlich sind. Das Gegenteil von verteilten Sperren sind eigenständige Sperren. Wenn wir Multithread-Programme schreiben, vermeiden wir Datenprobleme, die durch den gleichzeitigen Betrieb einer gemeinsam genutzten Variablen verursacht werden. Normalerweise verwenden wir eine Sperre, um die Richtigkeit der gemeinsam genutzten Variablen sicherzustellen Die gemeinsam genutzten Variablen liegen im gleichen Prozess. Wenn es mehrere Prozesse gibt, die gleichzeitig eine gemeinsam genutzte Ressource betreiben müssen, wie können sie sich dann gegenseitig ausschließen? Heutige Geschäftsanwendungen sind in der Regel Microservice-Architekturen, was auch bedeutet, dass eine Anwendung mehrere Prozesse bereitstellen muss. Wenn mehrere Prozesse dieselbe Datensatzzeile in MySQL ändern müssen, ist eine Verteilung erforderlich, um fehlerhafte Daten zu vermeiden wird zu diesem Zeitpunkt eingeführt. Der Stil ist gesperrt. Punkte erreichen wollen

So lösen Sie das Problem, dass Springboot nach dem Einlesen in ein JAR-Paket nicht auf die Datei zugreifen kann So lösen Sie das Problem, dass Springboot nach dem Einlesen in ein JAR-Paket nicht auf die Datei zugreifen kann Jun 03, 2023 pm 04:38 PM

Springboot liest die Datei, kann aber nach dem Packen in ein JAR-Paket nicht auf die neueste Entwicklung zugreifen. Es gibt eine Situation, in der Springboot die Datei nach dem Packen in ein JAR-Paket nicht lesen kann ist ungültig und kann nur über den Stream gelesen werden. Die Datei befindet sich unter resources publicvoidtest(){Listnames=newArrayList();InputStreamReaderread=null;try{ClassPathResourceresource=newClassPathResource("name.txt");Input

So implementieren Sie Springboot+Mybatis-plus, ohne SQL-Anweisungen zum Hinzufügen mehrerer Tabellen zu verwenden So implementieren Sie Springboot+Mybatis-plus, ohne SQL-Anweisungen zum Hinzufügen mehrerer Tabellen zu verwenden Jun 02, 2023 am 11:07 AM

Wenn Springboot + Mybatis-plus keine SQL-Anweisungen zum Hinzufügen mehrerer Tabellen verwendet, werden die Probleme, auf die ich gestoßen bin, durch die Simulation des Denkens in der Testumgebung zerlegt: Erstellen Sie ein BrandDTO-Objekt mit Parametern, um die Übergabe von Parametern an den Hintergrund zu simulieren dass es äußerst schwierig ist, Multi-Table-Operationen in Mybatis-plus durchzuführen. Wenn Sie keine Tools wie Mybatis-plus-join verwenden, können Sie nur die entsprechende Mapper.xml-Datei konfigurieren und die stinkende und lange ResultMap konfigurieren Schreiben Sie die entsprechende SQL-Anweisung. Obwohl diese Methode umständlich erscheint, ist sie äußerst flexibel und ermöglicht es uns

Vergleich und Differenzanalyse zwischen SpringBoot und SpringMVC Vergleich und Differenzanalyse zwischen SpringBoot und SpringMVC Dec 29, 2023 am 11:02 AM

SpringBoot und SpringMVC sind beide häufig verwendete Frameworks in der Java-Entwicklung, es gibt jedoch einige offensichtliche Unterschiede zwischen ihnen. In diesem Artikel werden die Funktionen und Verwendungsmöglichkeiten dieser beiden Frameworks untersucht und ihre Unterschiede verglichen. Lassen Sie uns zunächst etwas über SpringBoot lernen. SpringBoot wurde vom Pivotal-Team entwickelt, um die Erstellung und Bereitstellung von Anwendungen auf Basis des Spring-Frameworks zu vereinfachen. Es bietet eine schnelle und einfache Möglichkeit, eigenständige, ausführbare Dateien zu erstellen

Wie SpringBoot Redis anpasst, um die Cache-Serialisierung zu implementieren Wie SpringBoot Redis anpasst, um die Cache-Serialisierung zu implementieren Jun 03, 2023 am 11:32 AM

1. Passen Sie den RedisTemplate1.1-Standard-Serialisierungsmechanismus an. Die API-basierte Redis-Cache-Implementierung verwendet die RedisTemplate-Vorlage für Daten-Caching-Vorgänge. Öffnen Sie hier die RedisTemplate-Klasse und zeigen Sie die Quellcodeinformationen der Klasse publicclassRedisTemplateextendsRedisAccessorimplementsRedisOperations an. Schlüssel deklarieren, verschiedene Serialisierungsmethoden des Werts, der Anfangswert ist leer @NullableprivateRedisSe

So erhalten Sie den Wert in application.yml in Springboot So erhalten Sie den Wert in application.yml in Springboot Jun 03, 2023 pm 06:43 PM

In Projekten werden häufig einige Konfigurationsinformationen benötigt. Diese Informationen können in der Testumgebung und in der Produktionsumgebung unterschiedliche Konfigurationen haben und müssen möglicherweise später basierend auf den tatsächlichen Geschäftsbedingungen geändert werden. Wir können diese Konfigurationen nicht fest im Code codieren. Am besten schreiben Sie sie in die Konfigurationsdatei. Sie können diese Informationen beispielsweise in die Datei application.yml schreiben. Wie erhält oder verwendet man diese Adresse im Code? Es gibt 2 Methoden. Methode 1: Wir können den Wert, der dem Schlüssel in der Konfigurationsdatei (application.yml) entspricht, über den mit @Value versehenen Wert erhalten. Diese Methode eignet sich für Situationen, in denen es relativ wenige Mikrodienste gibt: Tatsächlich Projekte, wenn das Geschäft kompliziert ist, Logik

See all articles