我想使用带有注释@Value的字符串,但是如果我尝试将它们连接到另一个字符串,它们就会变成空对象。如果我只使用它们,它们效果很好。我需要做什么使用它们来连接另一个字符串或者这些字符串不能连接其他字符串?
@Value("${Example.com}")
private String HOST_NAME;
private String BASE_URL="http://"+HOST_NAME+":8080";
System.out.println(HOST_NAME);
// Output is 123.123.123.1123;(For example)
System.out.println(BASE_URL);
// Output like that http://null:8080;
最佳答案
这里:
private String BASE_URL="http://"+HOST_NAME+":8080";
HOST_NAME
是 null
因为在 Java 中,字段初始值设定项是在类构造函数之前评估的,但在 Spring 启动时,Spring 会值用 @Value
注释的字段。例如:
@Value("${Example.com}")
private String HOST_NAME;
仅在调用构造函数之后。
因此,为了解决您的要求,请设置 BASE_URL
在构造函数中,例如:
private String BASE_URL;
public FooClass(){
BASE_URL="http://"+HOST_NAME+":8080";
}
不是你的问题,但你可以使用 @Value
进行构造函数注入(inject)。它使类更少依赖于 Spring 并且更易于单元测试。
private String BASE_URL;
private String HOST_NAME;
public FooClass(@Value("${Example.com}") String hostName){
this.HOST_NAME = hostName;
this.BASE_URL="http://"+HOST_NAME+":8080";
}
关于java - 如何使用带有 @Value 注释的字符串来连接其他字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57626680/