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.
@Value
FrageDas 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>
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; }
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?
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<String, String> headers ) {}
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 ) {}
Spring 2.x-Lösung eins:
@Data @AllArgsConstructor @ConfigurationPropertiesScan @ConfigurationProperties("mail") public class MailProperties { private String user; private String password; private Map<String, String> headers; }
@SpringBootApplication @ConfigurationPropertiesScan("your.package.mailproperties") //your.package.mailproperties 替换成你的包路径 public class ExampleApplication { public static void main(String[] args) { SpringApplication.run(ExampleApplication.class, args); } }
Ihre Servicenutzungsattribute lauten wie folgt:
@Service @RequiredArgsConstructor public class CustomService { private final MailProperties mailProperties; }
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!