Наследование конфигурации в Spring Boot и различных источниках свойств - PullRequest
0 голосов
/ 25 января 2020

Используя Spring Boot и наследование с классами конфигурации, я пытаюсь сделать что-то вроде этого:

@Getter // Lombok annotation to automatically generate getters
@Setter // Same for setters
public abstract class AbstractConfiguration {

    @Value("${hello}")
    protected String hello;
}


@Configuration
@Qualifier(name = "en")
@PropertySource(value = "classpath:hello_en.properties")
public class EnglishConfiguration extends AbstractConfiguration {

}

@Configuration
@Qualifier(name = "fr")
@PropertySource(value = "classpath:hello_fr.properties")
public class FrenchConfiguration extends AbstractConfiguration {

}

С файлами свойств:

hello_en.properties

hello=Hello !

hello_fr.properties

hello=Bonjour !

А затем в другом месте кода я бы использовал классы конфигурации следующим образом:

@Autowired
@Qualifier(name = "en")
private AbstractConfiguration englishConfiguration;

@Autowired
@Qualifier(name = "fr")
private AbstractConfiguration frenchConfiguration;


.....

public void test() {

    System.out.println(englishConfiguration.getHello()); // Should print "Hello !"

    System.out.println(frenchConfiguration.getHello()); // Should print "Bonjour !"
}

По сути, идея заключается в том, что по мере добавления большего количества языков мне просто нужно будет добавить новый класс XXXXConfiguration с соответствующим новым источником свойств, а не реорганизовывать или изменять какой-либо код, который был ранее написан. Я полагаю, что пытаюсь применить принцип Open / Closed SOLID

. Текущий пример не работает. Какие ошибки я допустил? Как я могу улучшить код, чтобы он был максимально чистым, пожалуйста? Есть ли что-то, чего я не поняла о @Configuration и @Qualifier?

Кроме того, есть ли разница между написанием @Configuration(name = "en") и @Configuration @Qualifier(name = "en")?

Заранее спасибо за ваше помогите дорогие читатели.

...