Spring与SpringBoot中@Value属性解析差异及报错问题咨询
关于Spring @Value注解属性解析的疑问与解答
问题背景
我在查阅Spring官方文档时,看到如下代码示例:
@Component public class MovieRecommender { private final String catalog; public MovieRecommender(@Value("${catalog.name}") String catalog) { this.catalog = catalog; } } @Configuration @PropertySource("classpath:application.properties") public class AppConfig { }
对应的application.properties配置文件内容:
catalog.name=MovieCatalog
文档说明提到:Spring提供默认的宽松嵌入式值解析器,尝试解析属性值,若无法解析,则会将属性名称(例如${catalog.name})作为值注入。
但我实际测试时,把application.properties中的该属性移除后,系统直接报错:
Could not resolve placeholder 'catalog.name' in value "${catalog.name}"
这让我产生疑问:文档里说的"无法解析"具体指什么?
问题原因
后续我找到原因:
- 在Spring Core环境中,当未找到对应属性时,会直接注入
${catalog.name}本身 - 但在Spring Boot环境中,未找到属性则会直接抛出无法解析占位符的异常
内容的提问来源于stack exchange,提问作者Abe
相关产品推荐
相关产品推荐

