1. 개요
이 빠른 사용방법(예제)에서는 Spring 속성 파일에서 배열 또는 List에 값을 주입하는 방법을 배웁니다 .
2. 기본 동작
간단한 application.properties 파일 로 시작하겠습니다 .
arrayOfStrings=Baeldung,dot,com
변수 유형을 String []으로 설정했을 때 Spring이 어떻게 동작하는지 봅시다 .
@Value("${arrayOfStrings}")
private String[] arrayOfStrings;
@Test
void whenContextIsInitialized_thenInjectedArrayContainsExpectedValues() {
assertArrayEquals(new String[] {"Baeldung", "dot", "com"}, arrayOfStrings);
}
Spring이 우리의 구분자가 쉼표라고 정확하게 가정하고 그에 따라 배열을 초기화하는 것을 볼 수 있습니다.
또한 기본적으로 배열 삽입은 쉼표로 구분 된 값이있을 때만 올바르게 작동합니다.
3. List 삽입
같은 방식으로 List 를 주입하려고 하면 놀라운 결과를 얻을 수 있습니다.
@Value("${arrayOfStrings}")
private List<String> unexpectedListOfStrings;
@Test
void whenContextIsInitialized_thenInjectedListContainsUnexpectedValues() {
assertEquals(Collections.singletonList("Baeldung,dot,com"), unexpectedListOfStrings);
}
우리의 List은 우리가 우리의 특성 파일에 설정된 값과 동일 하나의 요소가 포함되어 있습니다.
List 를 올바르게 주입 하려면 Spring Expression Language (SpEL) 라는 특수 구문을 사용해야합니다 .
@Value("#{'${arrayOfStrings}'.split(',')}")
private List<String> listOfStrings;
@Test
void whenContextIsInitialized_thenInjectedListContainsExpectedValues() {
assertEquals(Arrays.asList("Baeldung", "dot", "com"), listOfStrings);
}
식이 @Value 와 함께 사용했던 $ 대신 #으로 시작하는 것을 볼 수 있습니다 .
또한 우리는 split 메소드 를 호출하고 있다는 점에 유의해야합니다 . 이는 표현식을 일반적인 주입보다 조금 더 복잡하게 만듭니다.
표현식을 좀 더 단순하게 유지하려면 속성을 특수 형식으로 선언 할 수 있습니다.
listOfStrings={'Baeldung','dot','com'}
Spring은이 형식을 인식 하고 좀 더 간단한 표현식을 사용하여 List 를 삽입 할 수 있습니다 .
@Value("#{${listOfStrings}}")
private List<String> listOfStringsV2;
@Test
void whenContextIsInitialized_thenInjectedListV2ContainsExpectedValues() {
assertEquals(Arrays.asList("Baeldung", "dot", "com"), listOfStringsV2);
}
4. 사용자 지정 구분 기호 사용
비슷한 속성을 만들어 보겠습니다. 이번에는 다른 구분 기호를 사용하겠습니다.
listOfStringsWithCustomDelimiter=Baeldung;dot;com
Lists를 주입 할 때 보았 듯이 원하는 구분 기호를 지정할 수있는 특수 표현식을 사용할 수 있습니다.
@Value("#{'${listOfStringsWithCustomDelimiter}'.split(';')}")
private List<String> listOfStringsWithCustomDelimiter;
@Test
void whenContextIsInitialized_thenInjectedListWithCustomDelimiterContainsExpectedValues() {
assertEquals(Arrays.asList("Baeldung", "dot", "com"), listOfStringsWithCustomDelimiter);
}
5. 다른 유형 주입
다음 속성을 살펴 보겠습니다.
listOfBooleans=false,false,true
listOfIntegers=1,2,3,4
listOfCharacters=a,b,c
Spring이 기본 유형을 즉시 지원한다는 것을 알 수 있으므로 특별한 구문 분석을 수행 할 필요가 없습니다.
@Value("#{'${listOfBooleans}'.split(',')}")
private List<Boolean> listOfBooleans;
@Value("#{'${listOfIntegers}'.split(',')}")
private List<Integer> listOfIntegers;
@Value("#{'${listOfCharacters}'.split(',')}")
private List<Character> listOfCharacters;
@Test
void whenContextIsInitialized_thenInjectedListOfBasicTypesContainsExpectedValues() {
assertEquals(Arrays.asList(false, false, true), listOfBooleans);
assertEquals(Arrays.asList(1, 2, 3, 4), listOfIntegers);
assertEquals(Arrays.asList('a', 'b', 'c'), listOfCharacters);
}
이것은 SpEL을 통해서만 지원되므로 동일한 방식으로 배열을 삽입 할 수 없습니다.
6. 프로그래밍 방식으로 속성 읽기
프로그래밍 방식으로 속성을 읽으려면 먼저 Environment 개체 의 인스턴스를 가져와야 합니다.
@Autowired
private Environment environment;
그런 다음 getProperty 메서드를 사용하여 키와 예상 유형을 지정하여 속성을 읽을 수 있습니다.
@Test
void whenReadingFromSpringEnvironment_thenPropertiesHaveExpectedValues() {
String[] arrayOfStrings = environment.getProperty("arrayOfStrings", String[].class);
List<String> listOfStrings = (List<String>)environment.getProperty("arrayOfStrings", List.class);
assertArrayEquals(new String[] {"Baeldung", "dot", "com"}, arrayOfStrings);
assertEquals(Arrays.asList("Baeldung", "dot", "com"), listOfStrings);
}
7. 결론
이 빠른 사용방법(예제)에서는 빠르고 실용적인 예제를 통해 배열 및 List 를 쉽게 주입하는 방법을 배웠습니다 .
- https://docs.spring.io/spring-framework/docs/current/reference/html
- https://www.baeldung.com/spring-inject-arrays-lists
'Java' 카테고리의 다른 글
Java의 접기 기술에 대한 사용방법(예제) (0) | 2021.03.24 |
---|---|
Spring과 함께하는 Jooq 소개 (0) | 2021.03.23 |
자바 생성자 사용방법(예제) (0) | 2021.03.23 |
특정 소나 위반을 제외하도록 프로젝트 구성 (0) | 2021.03.23 |
HttpClient 요청에 매개 변수 추가 (0) | 2021.03.23 |