ご存知のとおり、Spring では同じ目標を達成するための複数の方法が提供されており、その 1 つは構成ファイルに登録されている値を取得する方法です。
Spring を初めて使用する場合は、@Value
アノテーションを使用して application.properties
または application.yml
ファイルから値を取得するコードに遭遇するかもしれません。このアプローチを使用する場合、問題はありませんが、アプリケーションに不必要な複雑さが生じる可能性があることに注意してください。
@Value
質問@Value
を使用する場合の主な問題は、他の値を含む変数を扱うときです。これには意味がありますか?分かりませんか?例を見てみましょう:
次の構成ファイルがあると仮定します:
<code>mail.user=dev@locahost mail.password=123 mail.headers.x-from=Ekerdev mail.headers.x-custom=custom</code>
次のようにする必要があります:
<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>
今のところ問題はありません。しかしここで、アプリケーションがコード内の複数の場所でこれらの同じ変数を使用する必要があると想像してください。どれだけの重複コードが得られるか考えてみてください。
したがって、最良の解決策は、@ConfigurationProperties
アノテーションを使用することです。これにより、アプリケーションがクラスに変数を注入しやすくなり、以下の例に示すように、Spring の他の依存関係と同様に変数を使用できるようになります。
Spring 3.x ソリューション 1:
<code class="language-java">@Configuration @ConfigurationProperties("mail") public record MailProperties( String user, String password, Map<String, String> headers ) {}</code>
Spring 3.x ソリューション 2:
<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>
Spring 2.x ソリューション 1:
<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>
サービス使用属性は次のとおりです:
<code class="language-java">@Service @RequiredArgsConstructor public class CustomService { private final MailProperties mailProperties; }</code>
を使用する主な利点は、コード内で @ConfigurationProperties
アノテーションを探す必要がなくなり、コードが読みやすくなることです。 @Value
以上がSpring でプロのように構成を読み取るの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。