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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值