前面涉及到依赖注入,我们一般哦都是将一个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的更多相关文章

  1. Spring系列(三) Bean装配的高级技术

    profile 不同于maven的profile, spring的profile不需要重新打包, 同一个版本的包文件可以部署在不同环境的服务器上, 只需要激活对应的profile就可以切换到对应的环境 ...

  2. Spring实战3:装配bean的进阶知识

    主要内容: Environments and profiles Conditional bean declaration 处理自动装配的歧义 bean的作用域 The Spring Expressio ...

  3. Spring入门(九):运行时值注入

    Spring提供了2种方式在运行时注入值: 属性占位符(Property placeholder) Spring表达式语言(SpEL) 1. 属性占位符 1.1 注入外部的值 1.1.1 使用Envi ...

  4. spring in action小结3 运行时值注入

    讨论依赖注入的时候,通常讨论的是一个bean引用注入到另一个bean的属性或者构造器参数中.bean装配的另一个方面是将值注入到bean的属性或者构造器参数中.避免硬编码的方式就是运行时确定值. sp ...

  5. 使用Spring IoC进行Bean装配

    Spring概述 Spring的设计严格遵从的OCP(开闭原则),保证对修改的关闭,也就是外部无法改变spring内部的运行流程:提供灵活的扩展接口,也就是可以通过extends,implements ...

  6. Spring(3.2.3) - Beans(12): 属性占位符

    使用属性占位符可以将 Spring 配置文件中的部分元数据放在属性文件中设置,这样可以将相似的配置(如 JDBC 的参数配置)放在特定的属性文件中,如果只需要修改这部分配置,则无需修改 Spring ...

  7. 8 -- 深入使用Spring -- 1...4 属性占位符配置器

    8.1.4 属性占位符配置器 PropertyPlaceholderConfigurer 是一个容器后处理器,负责读取Properties属性文件里的属性值,并将这些属性值设置成Spring配置文件的 ...

  8. Spring - IoC(12): 属性占位符

    使用属性占位符可以将 Spring 配置文件中的部分元数据放在属性文件中设置,这样可以将相似的配置(如 JDBC 的参数配置)放在特定的属性文件中,如果只需要修改这部分配置,则无需修改 Spring ...

  9. Spring属性占位符 PropertyPlaceholderConfigurer

    http://www.cnblogs.com/yl2755/archive/2012/05/06/2486752.html PropertyPlaceholderConfigurer是个bean工厂后 ...

随机推荐

  1. 数据包从物理网卡流经 Open vSwitch 进入 OpenStack 云主机的流程

    目录 文章目录 目录 前言 数据包从物理网卡进入虚拟机的流程 物理网卡处理 如何将网卡收到的数据写入到内核内存? 中断下半部分软中断处理 数据包在内核态 OvS Bridge(Datapath)中的处 ...

  2. jmeter之吞吐量控制器

    比如说有一种场景是,10个并发里,有2个事操作业务A,有8个是操作业务B,要模拟这种业务场景,则可以通过吞吐量控制器来模拟 目录 1.用法 2.举例 1.用法 第一种:设置比例控制 选择percent ...

  3. 模型压缩-Learning Efficient Convolutional Networks through Network Slimming

    Zhuang Liu主页:https://liuzhuang13.github.io/ Learning Efficient Convolutional Networks through Networ ...

  4. pycharm建立django工程

    1.windows上安装了python 用pycharm建立django工程,必须要连接本地的python,也就是windows上的pyhton,不能连接linux上的pyhton,否则报错:plea ...

  5. Mac下配置多个SSH Keys

    Mac下配置多个SSH Keys 生成SSH key # Creates a new ssh key using the provided email # 默认生成的文件名为id_rsa,可以根据命令 ...

  6. python3 速查参考- python基础 9 -> MySQL基础概念、数据库create、alter、insert、update、delete、select等基础命令

    前置步骤: 下载一个绿色版的mysql数据库客户端连接工具 :http://wosn.net/821.html mysql平台为win7(以后会有CentOS上的) 学习目的: 掌握数据库的基本概念, ...

  7. C语言递归之翻转二叉树

    题目描述 翻转一棵二叉树. 示例 输入: / \ / \ / \ 输出: / \ / \ / \ 题目要求 /** * Definition for a binary tree node. * str ...

  8. 可视化,matplotlib,seaborn,plotly,pyecharts等等

    画频率直方图 import pandas as pd import matplotlib.pyplot as plt Series.value_counts().plot.bar() plt.show ...

  9. 【VS开发】CListCtrl控件使用方法总结

    CListCtrl控件使用方法总结 今天第一次用CListCtrl控件,遇到不少问题,查了许多资料,现将用到的一些东西总结如下: 以下未经说明,listctrl默认view 风格为report 相关类 ...

  10. vue-cli3 取消eslint 校验代码 真正的解决办法

    在网上找了各种办法都没解决,看了下文档就解决了 关闭vue-cli3.0 报错:eslint-disable-next-line to ignore the next line.   注意我这里是VU ...