우리 모두 알고 있듯이 Spring은 동일한 목표를 달성하기 위한 여러 가지 방법을 제공하며 그 중 하나는 구성 파일에 등록된 값을 검색하는 방법입니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!