我的许多应用程序属性都是由数据库提供的,我想通过存储库注入它们。我想知道这是否适用于春天。如果有人能提出解决方案,我会很高兴。我正在考虑的代码看起来有点谎言:
@Component
public class ExampleService implements Service {
private PlatformSetting setting1;
@Required
@Qualifier("setting1")
public void setSetting1(PlatformSetting setting1) {
this.setting1 = setting1;
}
public String getMessage() {
return "Hello world!" + setting1.getValue();
}
}
@Repository
public class PlatformSettingRepository {
private HashMap<String, PlatformSetting> settings;
{
settings = new HashMap<String, PlatformSetting>();
settings.put("setting1", new PlatformSetting("bla1"));
settings.put("setting2", new PlatformSetting("bla2"));
}
@Bean
public PlatformSetting findSetting(@Qualifier String qual) {
return settings.get(qual);
}
}
我知道我可以将PlatformSettingRepositoy注入服务中进行查找。但我不想在调用时进行这些查找,我希望spring容器在启动时执行它们。
答案 0 :(得分:3)
PropertyPlaceholderConfigurer与CommonsConfigurationFactory相结合是您的答案。请查看this帖子。
答案 1 :(得分:1)
使用Spring表达式语言。
第1步:使用@Bean公开你的设置hashmap,假设id =“appSettings”
步骤2:现在您想要注入设置1,只需使用注释:
@Value("#{ appSettings['setting1'] }")
private PlatformSetting setting1;
注意:这适用于普通值,它也适用于您的情况。虽然我还没试过。 如果这不起作用,您可以在方法中直接使用表达式解析器,因为您已经在使用java配置方式初始化bean。
答案 2 :(得分:0)
您可以使用InitializingBean:
@Component
public class Config implements InitializingBean {
/**
* Used to hold app properties.
*/
private Properties properties = new Properties();
//Getters, setters and filling properties from where you need
public void afterPropertiesSet() throws Exception {
//Initialize some static properties of other objects here.
}
}
将Config注入其他课程。