spring @Value注解#和$区别

一直以来,在使用@Value注解的时候,都是使用#的风格@Value("#{topic.topicName}"),但是也经常会看到@Value("${topic.topicName}")风格的属性注入,今天特地研究了下区别:

  • $注入的就是<context:property-placeholder location="classpath:config/*.properties" />加载的所有属性;
  • #则是spring EL,所以其实#{topic.topicName}就是一个topic对象的topicName属性,在实际中,通常使用的方式是在spring配置文件中包含一个<util:properties id="application" location="classpath:config/application.properties" />,然后以#{application.topicName}的方式来使用。不过这种方式的限制就是因为是Spring EL,所以application.properties中以“."分隔的属性无法直接注入,因为不被认为是一个对象,所以要写成@Value("#{application['topic.topicName'] ?: 25}")。

既然注入参数,就有可能有些情况下会有默认值的情况,同理,这两种方式对于默认值的语法要求是不同的,对于以属性方式$注入的,格式为${ property : default_value }。对于以spring EL方式注入的,则为#{ obj.property?: default_value },注意这里?:是一个操作符,而不是两个操作符,这和java的java三元表达式有点不同

例子可以参考:

http://www.cnblogs.com/larryzeal/p/5910149.html

spring EL可以参考:

http://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/expressions.html

posted @   zhjh256  阅读(941)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示