Using @Value
(한글)
@Value
는 일반적으로 외부화된 프로퍼티를 주입하는 데 사용됩니다:
-
Java
-
Kotlin
@Component
public class MovieRecommender {
private final String catalog;
public MovieRecommender(@Value("${catalog.name}") String catalog) {
this.catalog = catalog;
}
}
@Component
class MovieRecommender(@Value("\${catalog.name}") private val catalog: String)
다음 구성을 사용합니다:
-
Java
-
Kotlin
@Configuration
@PropertySource("classpath:application.properties")
public class AppConfig { }
@Configuration
@PropertySource("classpath:application.properties")
class AppConfig
And the following application.properties
file:
catalog.name=MovieCatalog
이 경우 catalog
매개변수 및 필드는 MovieCatalog
값과 동일합니다.
Spring에서는 기본적으로 관대한 임베디드 값 리졸버를 제공합니다.
속성 값을 확인하려고 시도하고 확인할 수 없는 경우 속성 이름(예: ${catalog.name}
)이 값으로 주입됩니다.
존재하지 않는 값에 대한 엄격한 제어를 유지하려면 다음 예제에서와 같이 PropertySourcesPlaceholderConfigurer
Bean을 선언해야 합니다:
-
Java
-
Kotlin
@Configuration
public class AppConfig {
@Bean
public static PropertySourcesPlaceholderConfigurer propertyPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}
@Configuration
class AppConfig {
@Bean
fun propertyPlaceholderConfigurer() = PropertySourcesPlaceholderConfigurer()
}
JavaConfig를 사용하여 PropertySourcesPlaceholderConfigurer 를 구성하는 경우, @Bean 메서드는 static 이어야 합니다.
|
위의 구성을 사용하면 ${}
플레이스홀더를 확인할 수 없는 경우 Spring 초기화에 실패할 수 있습니다.
또한 setPlaceholderPrefix
, setPlaceholderSuffix
, setValueSeparator
또는 setEscapeCharacter
와 같은 메서드를 사용하여 자리 표시자를 사용자 지정할 수 있습니다.
Spring Boot는 기본적으로 application.properties 및 application.yml 파일에서 속성을 가져오는 PropertySourcesPlaceholderConfigurer Bean을 구성합니다.
|
Spring에서 제공하는 내장된 변환기 지원을 통해 간단한 유형 변환(예: Integer
또는 int
로)을 자동으로 처리할 수 있습니다.
쉼표로 구분된 여러 개의 값을 별도의 작업 없이 String
배열로 자동 변환할 수 있습니다.
다음과 같이 기본값을 제공할 수 있습니다:
-
Java
-
Kotlin
@Component
public class MovieRecommender {
private final String catalog;
public MovieRecommender(@Value("${catalog.name:defaultCatalog}") String catalog) {
this.catalog = catalog;
}
}
@Component
class MovieRecommender(@Value("\${catalog.name:defaultCatalog}") private val catalog: String)
Spring BeanPostProcessor
는 @Value
의 String
값을 대상 유형으로 변환하는 프로세스를 처리하기 위해 백그라운드에서 ConversionService
를 사용합니다.
사용자 정의 유형에 대한 변환 지원을 제공하려는 경우 다음 예제와 같이 자체 ConversionService
Bean 인스턴스를 제공할 수 있습니다:
-
Java
-
Kotlin
@Configuration
public class AppConfig {
@Bean
public ConversionService conversionService() {
DefaultFormattingConversionService conversionService = new DefaultFormattingConversionService();
conversionService.addConverter(new MyCustomConverter());
return conversionService;
}
}
@Configuration
class AppConfig {
@Bean
fun conversionService(): ConversionService {
return DefaultFormattingConversionService().apply {
addConverter(MyCustomConverter())
}
}
}
'@Value’에 SpEL
식이 포함되어 있으면 다음 예제에서 보는 것처럼 런타임에 값이 동적으로 계산됩니다:
-
Java
-
Kotlin
@Component
public class MovieRecommender {
private final String catalog;
public MovieRecommender(@Value("#{systemProperties['user.catalog'] + 'Catalog' }") String catalog) {
this.catalog = catalog;
}
}
@Component
class MovieRecommender(
@Value("#{systemProperties['user.catalog'] + 'Catalog' }") private val catalog: String)
또한 SpEL을 사용하면 더 복잡한 데이터 구조도 사용할 수 있습니다:
-
Java
-
Kotlin
@Component
public class MovieRecommender {
private final Map<String, Integer> countOfMoviesPerCatalog;
public MovieRecommender(
@Value("#{{'Thriller': 100, 'Comedy': 300}}") Map<String, Integer> countOfMoviesPerCatalog) {
this.countOfMoviesPerCatalog = countOfMoviesPerCatalog;
}
}
@Component
class MovieRecommender(
@Value("#{{'Thriller': 100, 'Comedy': 300}}") private val countOfMoviesPerCatalog: Map<String, Int>)