在本指南中,我们将向您展示 Spring @Value
注释的一些提示和技巧。 @Value
注释用于为变量和方法参数赋值。它是在 Spring 的 version 3.0 中引入的。
@Value
注释被广泛用于从 Spring/Boot 应用程序的属性文件中获取值。当我们开发基于微服务的应用程序并从属性文件中获取配置时,它非常有用。
我们可以使用 @Value
注释分配具有默认/静态值的类成员变量。
// Set static string value
@Value("Success")
private String stringValue;
// Set default boolean value
@Value("true")
private boolean booleanValue;
// Set static integer value
@Value("101")
private int integerValue;
@Value
注释不仅用于设置静态/默认值,还可以用于从属性文件中读取值。
我们知道一个属性文件包含 key 和 value 对形式的值。
emp.message=Hi, I'm Manish and this message picked from a properties file.
为了获取键 emp.message 的值并将其设置为类成员变量,Spring 为我们提供了一些语法,即 双引号 » 美元符号 » 大括号 » 并且在大括号内是我们在属性文件.
@Value("${emp.message}")
private String empMessage;
默认情况下,@Value 注释在 Spring Boot 应用程序的 application.properties 文件中搜索 key。
问题:等一下,当 key 丢失或者我们忘记在 @Value
注释中提到的属性文件中定义它时会发生什么?
答案:它将抛出 BeanCreationException
:创建名为“employeeController”的 bean 时出错:自动装配依赖项的注入失败;嵌套异常是 java.lang.IllegalArgumentException
:无法解析值 "${emp.message}"
中的占位符“emp.message”。
当属性文件中缺少或找不到键时,可以通过设置默认值来处理上述异常。
语法几乎与上面提到的相同,唯一的变化是我们必须设置我们的默认消息,紧跟在 key 之后的 colon (:)
。
双引号»美元符号»大括号»键»冒号(:)»您的默认消息。
@Value("${emp.message.default: Hi, I'm employee default message.}")
private String degaultEmpMessage;
@Value
可以将逗号分隔的值分配给 List
。假设我们有一个键 emp.list,它在属性文件中保存用逗号分隔的员工姓名。
emp.list=Atul, Manish, Santosh, Dhirendra
emp.list 值可以分配给如下列表:
@Value("${emp.list}")
private List<String> empList;
我们还可以在属性文件中以键值对的形式设置键值,并将这些值分配给 Map
。
emp.details={firstName: 'Manish', lastName: 'Fartiyal', company: 'Websparrow.org India Pvt. Ltd.'}
可以使用 Spring 表达式语言 (SpEL) 将其分配给 Map
。在这种情况下,我们必须用 HASH (/#)
符号包围上述所有语法。
@Value("#{${emp.details}}")
private Map<String, String> empDetails;
让我们开始实际的编码并构建一个正在运行的应用程序。
这是我们的默认属性文件,我们在其中设置键值对中的值。
application.properties
emp.message=Hi, I'm Manish and this message picked from properties file.
emp.list=Atul, Manish, Santosh, Dhirendra
emp.details={firstName: 'Manish', lastName: 'Fartiyal', company: 'Websparrow.org India Pvt. Ltd.'}
EmployeeController
类,我们使用 @Value
注释从属性文件中获取值,并公开一个 REST 端点以显示在浏览器上。
EmployeeController.java
package org.websparrow.controller;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class EmployeeController {
@Value("Hi, My name is Atul.")
private String staticMessage;
@Value("${emp.message}")
private String empMessage;
@Value("${emp.message.default: Hi, I'm employee default message.}")
private String defaultEmpMessage;
@Value("${emp.list}")
private List<String> empList;
@Value("#{${emp.details}}")
private Map<String, String> empDetails;
@GetMapping("/employee")
public String employeeInfo() {
return toString();
}
@Override
public String toString() {
return "Static Message= " + staticMessage + "</br>"
+ " Employee Message=" + empMessage + "</br>"
+ "Default employee message when key is not found= " + defaultEmpMessage + "</br>"
+ " List of all employees= " + empList + "</br>"
+ " Size of employees= " + empList.size() + "</br>"
+ "Empoyee details= " + empDetails;
}
}
package org.websparrow;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringValueAnnotationApp {
public static void main(String[] args) {
SpringApplication.run(SpringValueAnnotationApp.class, args);
}
}
要测试应用程序,请通过执行上述类来启动 Spring Boot 应用程序,然后在您喜欢的 Web 浏览器中点击以下 API:
API:http://localhost:8080/employee
你会得到以下响应:
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.websparrow.org/spring/spring-value-annotation-example
内容来源于网络,如有侵权,请联系作者删除!