zoukankan      html  css  js  c++  java
  • 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还提供许多其他运算符以及丰富的运算功能(计算表达式、计算集合)。

      

     

     

     

     

     

      

  • 相关阅读:
    正向代理和反向代理的区别
    response对象和request对象详解
    非controller层获取response和request对象
    Java中的Lock与synchronized
    如何解决jeecgBoot前端运行项目之后无法获取验证码的问题
    怎么定义一个自己的vue组件
    前端集成方案——理论(二)
    javascript基础-ajax
    网页中文乱码
    javascript基础-事件2
  • 原文地址:https://www.cnblogs.com/bigbigbigo/p/8369671.html
Copyright © 2011-2022 走看看