1. 程式人生 > >Spring實戰(八)bean裝配的運行時值註入——屬性占位符和SpEL

Spring實戰(八)bean裝配的運行時值註入——屬性占位符和SpEL

裝配 getprop 直接 通過 mic lang 進行 ole 實戰

  前面涉及到依賴註入,我們一般哦都是將一個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還提供許多其他運算符以及豐富的運算功能。

  

  

Spring實戰(八)bean裝配的運行時值註入——屬性占位符和SpEL