我想使用带有注解@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_NAMEnull,因为在Java中,字段初始值设定项在类构造函数之前评估,但在Spring启动时,用@Value注释的Spring值字段如下:

@Value("${Example.com}")
private String HOST_NAME;


仅在调用构造函数之后。

因此,为了满足您的要求,请在构造函数中设置BASE_URL,例如:

private String BASE_URL;
public FooClass(){
   BASE_URL="http://"+HOST_NAME+":8080";
}


不是您的问题,但是您可以在@Value中使用构造函数注入。它使该类较少依赖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";
}

10-07 19:07
查看更多