Heim  >  Artikel  >  Java  >  Automatische Springboot-Konfiguration und @Configuration-Konfigurationsklasseninstanzanalyse

Automatische Springboot-Konfiguration und @Configuration-Konfigurationsklasseninstanzanalyse

WBOY
WBOYnach vorne
2023-05-14 18:25:14787Durchsuche

    @Configuration

    Hinweis 1

    Konfigurationsklasse (diese Klasse unter @Configuration) ist entspricht tatsächlich einer Fabrik. Die mit der Annotation @Bean gekennzeichnete Methode entspricht der Fabrikmethode

    Betrachten Sie das folgende Beispiel:

        @Configuration
        // 注意点1: 配置类其实相当于一个工厂, 标注 @Bean 注解的方法相当于工厂方法
        static class MyConfig {
            @Bean
            public Bean1 bean1() {
                System.out.println("bean1()");
                return new Bean1();
            }

    Automatische Springboot-Konfiguration und @Configuration-Konfigurationsklasseninstanzanalyse

    # 🎜🎜 #Wenn Sie in Zukunft eine Instanz von Bean1 generieren möchten, müssen Sie zuerst eine Bean namens myConfig (eine Factory) finden und dann in dieser Factory die Methode „bean1“ aufrufen, um ein Bean1-Objekt zu generieren.

    Für @Bean-Factory-Methoden ohne statische Modifikation, sogenannte Instanzfabriken, müssen Sie zuerst eine Instanz der Konfigurationsklasse myConfig erstellen. Bei denen mit statischer Modifikation handelt es sich um statische Methoden. Sie müssen nur das Klassenobjekt abrufen von myConfig und dann nur die direkte Methode.

    Hinweis 2

    @Bean unterstützt keine Methodenüberladung. Wenn mehrere überladene Methoden vorhanden sind, kann nur eine als Factory-Methode ausgewählt werden

        @Configuration
        @MapperScan("aaa")
        // 注意点1: 配置类其实相当于一个工厂, 标注 @Bean 注解的方法相当于工厂方法
        static class MyConfig {
            // 注意点2: @Bean 不支持方法重载, 如果有多个重载方法, 仅有一个能入选为工厂方法
            @Bean
            public Bean1 bean1() {
                System.out.println("bean1()");
                return new Bean1();
            }
            @Bean
            public Bean1 bean1(@Value("${java.class.version}") String a) {
                System.out.println("bean1(" + a + ")");
                return new Bean1();
            }
            @Bean
            public Bean1 bean1(@Value("${java.class.version}") String a, @Value("${JAVA_HOME}") String b) {
                System.out.println("bean1(" + a + ", " + b + ")");
                return new Bean1();
            }
    #🎜 🎜 #Wenn es eine überladene Methode gibt, ist die Priorität umso höher, je mehr Werte in die Parameter eingefügt werden müssen.

    Hinweis 3

    @Konfiguration kann nicht beiläufig gelöscht werden, da standardmäßig ein Proxy für die annotierte Klasse generiert wird. Sein Zweck besteht darin, sicherzustellen, dass jede @Bean-Methode aufgerufen wird Ansonsten können sie weiterhin ihre Singleton-Funktion sicherstellen , was dazu führt, dass die Abhängigkeitsinjektion fehlschlägt. Es ist an der Zeit, statische Factory-Methoden oder direkte Abhängigkeitsinjektion für @Bean-Methodenparameter zu verwenden. Für MapperScanner können Sie stattdessen Annotation verwenden.

    @SpringBootApplication ist eine kombinierte Annotation, die aus @ComponentScan, @EnableAutoConfiguration und @SpringBootConfiguration besteht:

    @SpringBootConfiguration Im Vergleich zu gewöhnlichem @Configuration besteht der einzige Unterschied darin, dass ersteres nur das Erscheinen erfordert einmal in der gesamten App, da nur die Hauptkonfigurationsklasse den Eingang zum gesamten Programm finden kann

    @ComponentScan: Component Scan

    #🎜🎜 #excludeFilters – wird zum Ausschließen während des Scannens von Komponenten verwendet und schließt auch automatische Konfigurationsklassen aus. Wird verwendet, um sich das Startpaket des Scanvorgangs zu merken, d. spring.factories (die automatische Konfigurationsklasse bedeutet, dass die automatische Konfigurationsklasse verwendet wird, wenn die Hauptkonfigurationsklasse nicht konfiguriert ist)# 🎜🎜#

    Warum nicht @Import verwenden, um die automatische Konfigurationsklasse direkt einzuführen#🎜🎜 #

    Es gibt zwei Gründe:

    Lassen Sie die Hauptkonfigurationsklasse stark mit der automatischen Konfigurationsklasse gekoppelt sein. Die Hauptkonfigurationsklasse sollte nicht wissen, welche Slave-Konfigurationen gibt es wird als Standardkonfiguration verwendet, wenn die Hauptkonfigurationsklasse nicht bereitgestellt wird)

    wird von AutoConfigurationImportSelector.class gelesen read META-INF/spring.factories Die automatische Konfigurationsklasse in realisiert eine schwache Kopplung.

    Darüber hinaus implementiert AutoConfigurationImportSelector.class die DeferredImportSelector-Schnittstelle, sodass die automatische Konfiguration später als die Hauptkonfiguration analysiert werden kann ##🎜🎜 #

    Das obige ist der detaillierte Inhalt vonAutomatische Springboot-Konfiguration und @Configuration-Konfigurationsklasseninstanzanalyse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen