Java Spring引导中的配置继承和不同的属性源
在配置类中使用Spring引导和继承,我尝试执行以下操作:Java Spring引导中的配置继承和不同的属性源,java,spring,spring-boot,inheritance,autowired,Java,Spring,Spring Boot,Inheritance,Autowired,在配置类中使用Spring引导和继承,我尝试执行以下操作: @Getter // Lombok annotation to automatically generate getters @Setter // Same for setters public abstract class AbstractConfiguration { @Value("${hello}") protected String hello; } @Configuration @Qualifier(n
@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 {
}
使用属性文件:
你好_en.properties
hello=Hello !
hello=Bonjour !
你好\u fr.properties
hello=Hello !
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类和一个匹配的新属性源,而不是重构或修改以前编写的任何代码。我相信我正在尝试应用S.O.L.I.D.的开放/封闭原则
当前的示例不起作用,我犯了哪些错误?我如何才能改进代码,使其尽可能干净?关于@配置
和@限定符
,有什么我不了解的吗
另外,编写@Configuration(name=“en”)
和@Configuration@Qualifier(name=“en”)
之间有什么区别吗
亲爱的读者,提前感谢您的帮助。您不认为有更好的方法来实现国际化(i18n)吗?当然有,但我承认我对任何方法都不熟悉,我只是认为我可以重用我现有的知识并将其应用于此用例。有什么建议吗?此外,从正确实现i18n开始,我真的很有兴趣了解如何使示例工作,即使只是为了它。检查我的回答:哦,我明白了,所以您只使用了一个属性源和@ConfigurationProperties!非常感谢:)暂时不讨论这个问题,看看是否有其他方法可以解决这个问题!