我希望集中访问我的所有属性值,这样我就可以做一些事情,比如确保所有内容都使用相同的属性名称,相同的默认值等。我已经创建了一个类集中所有这些,但我不确定需要访问这些值的类应该如何获取它们,因为你不能自动装配字符串。
我的班级是这样的:
@Configuration
public class SpringConfig {
@Autowired
@Value("${identifier:asdf1234}")
public String identifier;
}
我可以在多个班级中使用它
public class Foo {
@Autowired
private String theIdentifier;
}
public class Bar {
@Autowired
private String anIdentifier;
}
答案 0 :(得分:10)
基于属性初始化String bean:
@Configuration
public class SpringConfig {
@Bean
public String identifier(@Value("${identifier:asdf1234}") identifier) {
return identifier;
}
}
然后在"#{beanName}
注释中使用Spring's SpEL beanName表达式@Value
通过bean名称注入它
@Component
public class Foo {
@Value("#{identifier}")
private String oneIdentifier;
}
public class Bar {
@Value("#{identifier}")
private String sameIdentifier;
}
答案 1 :(得分:7)
另一个解决方案是创建一个包含所有配置的Spring bean并自动装配它:
@Component
public class MyConfig {
@Value("${identifier:asdf1234}")
public String identifier;
public String getIdentifier() {
return identifier;
}
}
在你的其他课程中:
public class Foo {
@Autowired
private MyConfig myConfig;
public void someMethod() {
doSomething(myConfig.getIdentifier());
}
}
答案 2 :(得分:1)
在我看来,对此没有干净的解决方案。我能想到的最简单的方法是使用一个static
常量String
字段来保存属性占位符。
public final class Constants {
private Constants() {}
public static final String PROPERTY_NAME= "${identifier.12345}";
}
并让所有@Value
注释使用它
public class Foo {
@Value(Constants.PROPERTY_NAME)
private String theIdentifier;
}
public class Bar {
@Value(Constants.PROPERTY_NAME)
private String anIdentifier;
}
现在,如果您需要更改属性名称,则只需在Constants
中更改它。 但请务必重新编译所有内容。