• Spring实战(八)bean装配的运行时值注入——属性占位符和SpEL


      前面涉及到依赖注入,我们一般哦都是将一个bean引用注入到另一个bean 的属性or构造器参数or Setter参数,即将为一个对象与另一个对象进行关联。

      bean装配的另一个方面是指将一个值注入到bean的属性or构造器参数中,通常我们可以将值硬编码在配置类中,XML中也是硬编码(写出所有值)。

      

      1、若想避免硬编码,让这些值在运行时再确定,Spring提供了两种在运行时求值的方式。

    • 属性占位符(Property placeholder)——Spring支持将属性定义到外部的属性文件中,然后用占位符将其插入到Spring bean中。
    • Spring表达式语言(SpEL)

     

      2、注入外部(属性源中)的值

      Spring中,处理外部值最简单的方式是:

      声明属性源——@PropertySource(“classpath:/xxx/xxx/app.property”)

      再通过Spring的Environment来检索属性值——env.getProperty("xxx");

      这样我们就利用外部文件中的值完成了注入。

     

      3、Spring中的Environment  API

      这个接口表示当前运行程序的运行环境,可以直接从Environment中检索属性。

      (详细解析参考:http://jinnianshilongnian.iteye.com/blog/2000183

     

      4、解析属性占位符

      占位符形式: "${disc.title}"(括号里为属性名称)

      解析外部属性能够将值的处理推迟到运行时,它根据名称解析来自Spring Environment和属性源的属性。

     

      5、使用SpEL进行装配(非常强大)

      Spring表达式语言提供了一种更通用的方式在运行时计算要注入的值,可以实现超乎想象的装配效果。

      SpEL表达式均要放入"#{  }"中。(配置时)

     

      SpEL可以表示字面值,如浮点、String值以及Boolean值:

      #{3.14159}、#{'Hello'}、#{false}

     

      SpEL可以引用bean(通过ID)、属性和方法;

      #{beanID}、#{beanID.field}、#{beanID.method()}

      

      运算符T()的结果是一个Class对象,它的价值在于可以访问目标类的静态方法和常量,例如:

      T(java.lang.Math).random()

      

      SpEL还提供许多其他运算符以及丰富的运算功能(计算表达式、计算集合)。

      

     

     

     

     

     

      

  • 相关阅读:
    deflate树与deflate编码
    生产者消费者模式下的并发无锁环形缓冲区
    环形缓冲区的设计及其在生产者消费者模式下的使用(并发有锁环形队列)
    zeromq源码分析笔记之无锁队列ypipe_t(3)
    zeromq源码分析笔记之线程间收发命令(2)
    zeromq源码分析笔记之架构(1)
    PHP和golang差异见解
    关于助力红包随机分配思考总结
    TCP四次挥手
    TCP三次握手
  • 原文地址:https://www.cnblogs.com/bigbigbigo/p/8369671.html
Copyright © 2020-2023  润新知