前言

在 SpringBoot 项目中,我们经常会使用两种占位符(有时候还会混用),它们分别是:

  • @*@

  • ${*}

如果我们上网搜索「SpringBoot 的占位符 @」,大部分答案会告诉你,SpringBoot 的默认占位符由 ${*}变成 @*@了,更好一点的答案会引用 SpringBoot官网 中的描述:

于是我们得到了答案,并心安理得地开始使用 @*@占位符。但如果有探索欲比较强的同学问起:Spring 中的占位符本来是 ${*},为啥 SpringBoot 中的占位符就变成 @*@了呢?有时候这两种占位符还能混用,这又是为什么呢?

今天,我们就来一探究竟,这两种占位符到底是如何实现的。

场景

首先要说明两种场景:

  1. 使用 @Value 注解注入属性时,只能使用 ${*} 占位符解析。

  2. 处理资源文件中的属性时,这两种占位符就有点意思了:它们既有可能都有效,还有可能都不生效,甚至你可以扩展自己的占位符!当然这一切都要看你是怎么配置的。下文会进行详细描述。

我们先简单看下第一种场景,@Value 注解的处理属于 Spring 核心框架逻辑,可以参见 PropertySourcesPlaceholderConfigurer 这个类,最终会执行 ${*} 占位符的解析。其中的冒号后面可以写默认值。

聊聊 SpringBoot 中的两种占位符:@*@ 和 ${*}-LMLPHP
12-11 22:29