우리가 스프링으로 개발하다보면 @Component로 등록되어있는 class안에 @Value어노테이션이 붙어 있는 필드들을 볼 수 있다. 그렇다면 이 어노테이션이 하는 역할은 무엇일까?
@Value어노테이션은 외부에서 설정된 값 주로 application.yml이나 application.properites에서 설정된 값을 불러와 스프링빈의 필드에 주입될 때 사용된다. 예시를 보면 이해가 빠르게 될 것이다.
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class MyComponent {
@Value("${app.name}")
private String appName;
@Value("${app.version}")
private String appVersion;
public void printAppInfo() {
System.out.println("App Name: " + appName);
System.out.println("App Version: " + appVersion);
}
}
//application.properites
app.name=MyApplication
app.version=1.0.0
위와 같이 appName과 appVersion이 application.yml에 정의되어 있다면 해당 값을 가져와서 스프링 빈에 등록을 해준다.
해당 어노테이션은 우리가 자주 사용하지만 주의할 점이 있는데 @Component 어노테이션을 붙여 주어야 한다는 것이다. 만일 @Component를 붙여주지 않는다면 해당 클래스는 컴포넌트 스캔이 대상이 되지 않아 스프링 빈으로 등록되지 않고, @Value 어노테이션 또한 동작하지 않기 때문에 이점을 주의해야한다.
또 모든 필드에 @value를 넣어야할 때 번거로울 수가 있다. 이 때 사용하는 어노테이션이 @ConfigurationProperties이다 해당 어노테이션은 특정 설정 값 그룹 전체를 한 번에 클래스에 주입할 때 사용하여 설정 관리가 더 편리하기 때문에 대규모 설정에 주로 사용이 된다.
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "app")
public class AppProperties {
private String name;
private String version;
// Getter와 Setter 추가
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
}
//application.properites
app.name=MyApplication
app.version=1.0.0
오늘은 간단하게 @Value어노테이션에 대해 살펴보았고 해당 어노테이션을 주로 사용하지만 스프링 빈 생성주기에 관해서는 제대로 몰랐던 것 같았다. 앞으로 개발을 할 때 이런 빈의 생성주기들을 생각해보면서 개발하면 조금 더 내 개발이 풍성해질거 같다라는 생각을 하며 포스팅을 마친다~