Используя 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")
?
Заранее спасибо за ваше помогите дорогие читатели.