Inhaltsverzeichnis
Einführung
@ValueFrage
Lösung
Vorteile
Heim Java javaLernprogramm Lesen Sie die Konfiguration wie ein Profi auf Spring

Lesen Sie die Konfiguration wie ein Profi auf Spring

Jan 23, 2025 pm 12:05 PM

Reading configuration like a pro on Spring

Einführung

Wie wir alle wissen, bietet Spring mehrere Möglichkeiten, dasselbe Ziel zu erreichen. Eine davon ist das Abrufen der in der Konfigurationsdatei registrierten Werte.

Wenn Sie neu bei Spring sind, stoßen Sie möglicherweise auf Code, der die Annotation @Value verwendet, um Werte aus einer Datei application.properties oder application.yml abzurufen. Wenn Sie diesen Ansatz verwenden, sollten Sie sich darüber im Klaren sein, dass daran nichts auszusetzen ist, Sie jedoch möglicherweise unnötige Komplexität in Ihre Anwendung einbringen.

@ValueFrage

Das Hauptproblem bei der Verwendung von @Value besteht im Umgang mit Variablen, die andere Werte enthalten. Macht das Sinn? nicht verstehen? Schauen wir uns ein Beispiel an:

Angenommen, Sie haben die folgende Konfigurationsdatei:

<code>mail.user=dev@locahost
mail.password=123
mail.headers.x-from=Ekerdev
mail.headers.x-custom=custom</code>
Nach dem Login kopieren

Sie müssen es so machen:

@Service
public class CustomService {
    @Value("${mail.user}")
    private String user;

    @Value("${mail.password}")
    private String password;

    @Value("${mail.headers.x-from}")
    private String xFrom;

    @Value("${mail.headers.x-custom}")
    private String xCustom;
}
Nach dem Login kopieren

Bisher keine Probleme. Stellen Sie sich nun vor, dass Ihre Anwendung dieselben Variablen an mehreren Stellen in Ihrem Code verwenden muss. Überlegen Sie, wie viel doppelter Code wir bekommen würden, oder?

Lösung

Die beste Lösung ist also die Verwendung der Annotation @ConfigurationProperties. Dies erleichtert unserer Anwendung das Einfügen von Variablen in Klassen und wir können sie wie jede andere Abhängigkeit in Spring verwenden, wie im folgenden Beispiel gezeigt:

Spring 3.x-Lösung eins:

@Configuration
@ConfigurationProperties("mail")
public record MailProperties(
    String user,
    String password,
    Map&lt;String, String&gt; headers
) {}
Nach dem Login kopieren

Spring 3.x-Lösung zwei:

@Configuration
@ConfigurationProperties("mail.headers")
public record MailHeadersProperties(
    String xFrom,
    String xCustom
) {}

@Configuration
@ConfigurationProperties("mail")
public record MailProperties(
    String user,
    String password,
    MailHeadersProperties headers
) {}
Nach dem Login kopieren

Spring 2.x-Lösung eins:

@Data
@AllArgsConstructor
@ConfigurationPropertiesScan
@ConfigurationProperties("mail")
public class MailProperties {
    private String user;
    private String password;
    private Map&lt;String, String&gt; headers;
}
Nach dem Login kopieren
@SpringBootApplication
@ConfigurationPropertiesScan("your.package.mailproperties") //your.package.mailproperties  替换成你的包路径
public class ExampleApplication {
    public static void main(String[] args) {
        SpringApplication.run(ExampleApplication.class, args);
    }
}
Nach dem Login kopieren

Ihre Servicenutzungsattribute lauten wie folgt:

@Service
@RequiredArgsConstructor
public class CustomService {
    private final MailProperties mailProperties;
}
Nach dem Login kopieren

Vorteile

Der Hauptvorteil der Verwendung von @ConfigurationProperties besteht darin, dass wir nicht nach der @Value-Annotation im Code suchen müssen, was die Lesbarkeit des Codes erleichtert.

Das obige ist der detaillierte Inhalt vonLesen Sie die Konfiguration wie ein Profi auf Spring. 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 Artikel -Tags

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 funktioniert der Klassenladungsmechanismus von Java, einschließlich verschiedener Klassenloader und deren Delegationsmodelle? Wie funktioniert der Klassenladungsmechanismus von Java, einschließlich verschiedener Klassenloader und deren Delegationsmodelle? Mar 17, 2025 pm 05:35 PM

Wie funktioniert der Klassenladungsmechanismus von Java, einschließlich verschiedener Klassenloader und deren Delegationsmodelle?

Top 4 JavaScript -Frameworks in 2025: React, Angular, Vue, Svelte Top 4 JavaScript -Frameworks in 2025: React, Angular, Vue, Svelte Mar 07, 2025 pm 06:09 PM

Top 4 JavaScript -Frameworks in 2025: React, Angular, Vue, Svelte

Wie benutze ich Maven oder Gradle für das fortschrittliche Java -Projektmanagement, die Erstellung von Automatisierung und Abhängigkeitslösung? Wie benutze ich Maven oder Gradle für das fortschrittliche Java -Projektmanagement, die Erstellung von Automatisierung und Abhängigkeitslösung? Mar 17, 2025 pm 05:46 PM

Wie benutze ich Maven oder Gradle für das fortschrittliche Java -Projektmanagement, die Erstellung von Automatisierung und Abhängigkeitslösung?

Wie kann ich funktionale Programmierungstechniken in Java implementieren? Wie kann ich funktionale Programmierungstechniken in Java implementieren? Mar 11, 2025 pm 05:51 PM

Wie kann ich funktionale Programmierungstechniken in Java implementieren?

Node.js 20: wichtige Leistungssteigerung und neue Funktionen Node.js 20: wichtige Leistungssteigerung und neue Funktionen Mar 07, 2025 pm 06:12 PM

Node.js 20: wichtige Leistungssteigerung und neue Funktionen

ICEBERG: Die Zukunft von Data Lake Tabellen ICEBERG: Die Zukunft von Data Lake Tabellen Mar 07, 2025 pm 06:31 PM

ICEBERG: Die Zukunft von Data Lake Tabellen

Wie kann ich JPA (Java Persistence-API) für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden verwenden? Wie kann ich JPA (Java Persistence-API) für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden verwenden? Mar 17, 2025 pm 05:43 PM

Wie kann ich JPA (Java Persistence-API) für Objektrelationszuordnungen mit erweiterten Funktionen wie Caching und faulen Laden verwenden?

Wie implementiere ich mehrstufige Caching in Java-Anwendungen mit Bibliotheken wie Koffein oder Guava-Cache? Wie implementiere ich mehrstufige Caching in Java-Anwendungen mit Bibliotheken wie Koffein oder Guava-Cache? Mar 17, 2025 pm 05:44 PM

Wie implementiere ich mehrstufige Caching in Java-Anwendungen mit Bibliotheken wie Koffein oder Guava-Cache?

See all articles