Скажем, у меня есть родительский класс с одним членом:
public class Person {
private String name;
public void setName(String aName) {
this.name = aName;
}
public String getName() {
return this.name;
}
}
У меня есть класс конфигурации, например:
@Configuration
@ConfigurationProperties
public class ApplicationConfig {
private final List<Person> persons =
new ArrayList<Person>();
public List<Person> getPersons() {
return persons;
}
И я хочу инициализировать набор людей из моего файла application.yml:
persons:
- Bob
- Eva
- Robin
Я обнаружил, что это работает при условии, что Person определяется как:
public class Person {
private String name;
public Person(String aName) {
this.name = aName;
}
public String getName() {
return this.name;
}
}
Но он ломается, как только я представляю Employee extends Person, где у сотрудника есть employeeNumber. В идеале я хотел бы сделать это, но это недопустимый yml:
persons:
- Bob
- Eva
- Robin
employees:
- Tim
employeeNum: 123
@ royalGhost Я не понимаю, вы имеете в виду, что Spring заполняет список строк, а затем использует его для инициализации списка лиц?
Да, вы можете хранить список людей во внешнем файле, таком как application.yml.
@royalGhost, я храню людей во внешнем файле. Мой вопрос заключается в том, чтобы явно указать имя члена в yml или оставить его для Spring, чтобы выяснить это.
Боюсь, вам придется использовать подробную версию
Связанный вопрос: stackoverflow.com/questions/5150181/…




Пока я не нашел способа сделать это, кроме как определить как родительский, так и дочерний класс с помощью геттеров и сеттеров (так что никаких аргументов конструктора!) И определить .yml как:
persons:
- name: Bob
- name: Eva
- name: Robin
employees:
- name Tim
employeeNum: 123
Вы можете передать предварительно подготовленный список людей в конструктор при его инициализации. Вы также можете прочитать этот список из файла yml.