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

      

     

     

     

     

     

      

  • 相关阅读:
    JavaScript深入浅出补充——(一)数据类型,表达式和运算符
    Linux简介,虚拟机安装,网络设置,桌面和vim安装
    JavaScript对象之document对象
    python之MySQL学习——数据查询
    python框架Scrapy中crawlSpider的使用
    在Scrapy中使用IP池或用户代理更新版(python3)
    封装IP池和用户代理相应的类(python3)
    在Scrapy中使用IP池或用户代理(python3)
    scrapy工程创建及pycharm运行
    python框架Scrapy报错TypeError: 'float' object is not iterable解决
  • 原文地址:https://www.cnblogs.com/bigbigbigo/p/8369671.html
Copyright © 2011-2022 走看看