Seperti yang kita sedia maklum, Spring menyediakan pelbagai cara untuk mencapai matlamat yang sama, salah satunya ialah cara mendapatkan semula nilai yang didaftarkan dalam fail konfigurasi.
Jika anda baru menggunakan Spring, anda mungkin menjumpai kod yang menggunakan anotasi @Value
untuk mendapatkan semula nilai daripada fail application.properties
atau application.yml
. Jika anda menggunakan pendekatan ini, sedar bahawa tidak ada yang salah dengannya, bagaimanapun, anda mungkin memperkenalkan kerumitan yang tidak perlu ke dalam aplikasi anda.
@Value
SoalanMasalah utama menggunakan @Value
ialah apabila berurusan dengan pembolehubah yang mengandungi nilai lain. Adakah ini masuk akal? tak faham? Mari lihat contoh:
Anggap anda mempunyai fail konfigurasi berikut:
<code>mail.user=dev@locahost mail.password=123 mail.headers.x-from=Ekerdev mail.headers.x-custom=custom</code>
Anda perlu melakukannya seperti ini:
<code class="language-java">@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; }</code>
Setakat ini, tiada masalah. Tetapi sekarang bayangkan bahawa aplikasi anda perlu menggunakan pembolehubah yang sama ini di berbilang tempat dalam kod anda. Fikirkan tentang berapa banyak kod pendua yang kita akan dapat, bukan?
Jadi penyelesaian terbaik ialah menggunakan @ConfigurationProperties
anotasi. Ini memudahkan aplikasi kami untuk menyuntik pembolehubah ke dalam kelas dan kami boleh menggunakannya seperti pergantungan lain dalam Spring, seperti yang ditunjukkan dalam contoh di bawah:
Penyelesaian Spring 3.x satu:
<code class="language-java">@Configuration @ConfigurationProperties("mail") public record MailProperties( String user, String password, Map<String, String> headers ) {}</code>
Penyelesaian musim bunga 3.x dua:
<code class="language-java">@Configuration @ConfigurationProperties("mail.headers") public record MailHeadersProperties( String xFrom, String xCustom ) {} @Configuration @ConfigurationProperties("mail") public record MailProperties( String user, String password, MailHeadersProperties headers ) {}</code>
Penyelesaian Spring 2.x satu:
<code class="language-java">@Data @AllArgsConstructor @ConfigurationPropertiesScan @ConfigurationProperties("mail") public class MailProperties { private String user; private String password; private Map<String, String> headers; }</code>
<code class="language-java">@SpringBootApplication @ConfigurationPropertiesScan("your.package.mailproperties") //your.package.mailproperties 替换成你的包路径 public class ExampleApplication { public static void main(String[] args) { SpringApplication.run(ExampleApplication.class, args); } }</code>
Atribut penggunaan perkhidmatan anda adalah seperti berikut:
<code class="language-java">@Service @RequiredArgsConstructor public class CustomService { private final MailProperties mailProperties; }</code>
Kelebihan utama menggunakan @ConfigurationProperties
ialah kita tidak perlu mencari @Value
anotasi dalam kod, yang menjadikan kod lebih mudah dibaca.
Atas ialah kandungan terperinci Konfigurasi membaca seperti profesional pada Spring. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!