java - 如何使用带有 @Value 注释的字符串来连接其他字符串?

标签 java spring annotations

我想使用带有注释@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 启动时,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/

相关文章:

java - 如何流式传输字符串列表并根据每个项目中的数字对其进行排序

Java GridBagConstraints gridx 和 gridy 不工作?

java - 使用 Spring MVC 和 Spring Security 填充基于用户角色的模型

java - 用户帐户被禁用 - Spring Security

java - 如何在 IDE 中将应用程序作为 jar 运行,但将 maven 打包为 war?

java - 如何删除java应用程序中的上下文路径

java - 使用带注释的复合主键进行元素映射

java - 如何通过 JDBC 使用包含问号 "?"的 PostgreSQL JSON(B) 运算符

java - 如何在 Hibernate 中从非实体子类中持久化实体

java - 将多个注释合并为一个,避免重复