@Value 어노테이션
Q1.
(08-07 참고)
@Value("${mailhelper.sender.name}") private final String senderName = null;
저 @Value 어노테이션을 걸어두면, Spring이 알아서 설정값을 appication.properties 에서 가져오는거야?
A1.
네, 맞습니다. @Value 어노테이션을 사용하면 Spring이 해당 설정값을 application.properties 파일에서 가져와서 주입합니다. 예를 들어, application.properties 파일에 다음과 같은 설정이 있다면:
mailhelper.sender.name=YourSenderName
Spring은 @Value("${mailhelper.sender.name}") 어노테이션을 통해 mailhelper.sender.name 값을 senderName 필드에 주입합니다.
다만, private final 필드에 값을 주입하려면 생성자를 통해 주입해야 합니다. 이를 수정한 코드는 다음과 같습니다:
@Value("${mailhelper.sender.name}")
private String senderName;
또는 생성자를 통해 주입하는 방법:
private final String senderName;
public MailHelper(@Value("${mailhelper.sender.name}") String senderName) {
this.senderName = senderName;
}
이렇게 하면 Spring이 application.properties 파일에서 설정값을 가져와 senderName 필드에 주입하게 됩니다.
Q2.
@Value("${mailhelper.sender.name}") private final String senderName = null;
이 코드는 문제가 있는거야?
A2.
네, 이 코드는 문제가 있습니다. @Value 어노테이션을 사용하여 값을 주입할 때 private final 필드에 직접 주입할 수 없습니다. final 필드는 생성자를 통해 초기화해야 합니다. 이를 해결하려면 생성자를 통해 값을 주입하거나 final 키워드를 제거해야 합니다.
수정 방법 1: 생성자를 통한 주입
private final String senderName;
public MailHelper(@Value("${mailhelper.sender.name}") String senderName) {
this.senderName = senderName;
}
수정 방법 2: final 키워드 제거
@Value("${mailhelper.sender.name}")
private String senderName;
이 두 가지 방법 중 하나를 선택하여 문제를 해결할 수 있습니다.