【问题标题】:Setting order of injection values from properties in Spring Boot for @Value在 Spring Boot 中为 @Value 设置注入值的顺序
【发布时间】:2019-04-30 04:24:12
【问题描述】:
我有一个问题,关于设置@Value 注释的注入顺序。我尝试使用@Order,但对于这种情况,它不起作用。
我为什么要问这个?因为某些值依赖于其他值。我可以在@PostConstructor 中创建更多逻辑,但如果存在任何用于控制顺序的解决方案,它将对我有所帮助。
为了澄清,一个不起作用的例子:
@Value("${first}")
@Order(1)
public void setFirst(boolean first) {
FIRST = first;
}
@Value("${second}")
@Order(2)
public void setSecond(String second) {
SECOND = second;
if(first){
//do something
}
}
【问题讨论】:
标签:
spring-boot
properties
annotations
inject
【解决方案1】:
看来你有两个全局变量如
private boolean FIRST;
private String SECOND;
那么你可以如下实现:
@Value("${first}")
public void setFirst(boolean first) {
FIRST = first;
}
@Value("${second}")
public void setSecond(String second) {
SECOND = second;
if(FIRST){
//do something
}
}
【解决方案2】:
如果某些内容有效,您可以使用 Environment 类来获取值。例如:
@Autowired
private Environment env;
@Value("${first}")
public void setFirst(boolean first) {
FIRST = first;
if (FIRST)
SECOND = env.getProperty("second");
}