@Value 是在 IOC容器初始化Bean实例化,在属性填充过程中进行赋值的。
@Value 注解可以在任何 Spring 管理的 Bean(如 @Service、@Component、@Controller 等)中生效。只要该类被 Spring 容器管理,@Value 就能自动注入配置值。
@Value 注解可以接收多种类型的参数
- 基本类型:如 int、long、double、boolean、String 等。
- 包装类型:如 Integer、Long、Double、Boolean 等。
- 集合类型:如 List、Set、Map(通常用逗号分隔字符串自动转为集合)。
- 枚举类型:可自动转换为对应的枚举值。
- SpEL 表达式:如 @Value("#{2 * 10}")。
- 配置文件中的占位符:如 @Value("${server.port}")。
- 嵌套属性:如 @Value("${foo.bar.name}")。
- 默认值:如 @Value("${foo.bar:defaultValue}")。
使用 @Value 注解时,YAML 列表的格式不被直接支持,最好使用逗号分隔的字符串。如果需要使用列表格式,推荐使用 @ConfigurationProperties,这样可以更方便地处理复杂的配置。
YAML特有格式:数组
names:
- 张三
- 李四
@Value无法使用yaml中的这个数组形式
@Value("${names:王五}")
private String names;
@Confi // todo 待完善!!
@Configuration
@ConfigurationProperties(prefix = "name")
public class FlowEditPermConfig {
private List<String> name;
public List<String> getName() {
return name;
}
public void setName(List<String> name) {
this.name = name;
常见错误:使用@Value使用某xx配置,配置文件中不存在,就会出现项目无法启动的异常。为了通用避免,可采用: 冒号的赋值默认值解决。示例
@Value("${some.type:}")
private String type;
static修饰符 初始化要早于@value,变量、方法被static修饰,就会导致无法取得配置文件中的预期值。
给static常量注入配置文件值办法
1、setXXX方法追加@Value注解
import org.springframework.beans.factory.annotation.Value;
// 文件存储目录
public static String SAVE_PATH;
// 这是一个set方法。添加@Value注解,可对static修饰的属性赋值。
@Value("${local.file.temp.dir}")
public void setSavePath(String savePath){
SAVE_PATH = savePath;
}
2、@PostConstruct
配置文件Yaml
Message:
CONFIG_DOMAIN: https://wippe2.cn.dhl.com
使用
// 定义目标常量
private static String CURRENT_DOMAIN;
// 定义中转常量
@Value("${Message.CONFIG_DOMAIN}")
public String CONFIG_DOMAIN;
// 给目标常量赋值
@PostConstruct
private void initValue(){
CURRENT_DOMAIN = CONFIG_DOMAIN;
}
3、implements InitializingBean
public class IndexController implements InitializingBean {
/**文件存储目录*/
public static String SAVE_PATH;
@Value("${local.file.temp.dir}")
public String SAVE_PATH_TEMP;
@GetMapping("/test")
public void test(){
System.out.println(SAVE_PATH);
}
@Override
public void afterPropertiesSet() throws Exception {
SAVE_PATH = SAVE_PATH_TEMP;
}
}
@Value配置默认值
使用:隔开
@Value("${Message.CONFIG_DOMAIN:我是默认值}")
public String SAVE_PATH_TEMP;
@Value("${user.male.names:张三,李四}")
private List<String> userNames;
特殊说明:
上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤
免责声明: 本站文章旨在总结学习互联网技术过程中的经验与见解。任何人不得将其用于违法或违规活动!所有违规内容均由个人自行承担,与作者无关。
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤
免责声明: 本站文章旨在总结学习互联网技术过程中的经验与见解。任何人不得将其用于违法或违规活动!所有违规内容均由个人自行承担,与作者无关。
