前面涉及到依赖注入,我们一般哦都是将一个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. 去除ZERO WIDTH SPACE 零宽字符: 看不见却占位置的字符

    ZERO WIDTH SPACE 由于历史原因,编码方案中保留着该类编码 解决方案 1. 替换 ```js str.replace(/[\u200B-\u200D\uFEFF]/g, ''); ``` ...

  2. Consider defining a bean of type `xxx` in your configuration问题解决

    在使用SpringBoot装配mybatis时出现了异常 *************************** APPLICATION FAILED TO START *************** ...

  3. 20175329&20175313&20175318 2019-2020 《信息安全系统设计基础》实验二

    我们一个小组都在实验前40mins提前做完但是因为队员截图发的迟没能及时提交上蓝墨云班课的任务超时 希望老师能看见将我的经验改正,谢谢老师 https://www.cnblogs.com/xiannv ...

  4. DOS 获取硬盘序列号

    DOS命令行操作: 使用diskpart命令,Win+R键运行cmd,进入命令行界面:       1.diskpart       2.list disk 查看有几块硬盘       3.selec ...

  5. 3.AOP中的IntroductionAdvisor

    上篇中的自定义Advisor是实现的AbstractPointcutAdvisor,Advisor其实还有一个接口级别的IntroductionAdvisor                     ...

  6. Horovod 通信策略

    因为最近的工作要和Horovod打交道,所以分析了Horovod的源码.在这里记一笔. Horovod有几个亮点,第一,它不依托于某个框架,自己通过MPI建立了一套分布式系统,完成了allreduce ...

  7. 注解方式实现AOP编程

    步骤: 1) 先引入aop相关jar文件           (aspectj  aop优秀组件) spring-aop-3.2.5.RELEASE.jar   [spring3.2源码] aopal ...

  8. xcode 老项目library not found for -libstdc++.6.0.9

    Xcode升级到Xcode10.0后,由于去掉陈旧的libstdc++库替换为libc++,libc++相对是苹果最新版的C++库,经过优化并全面支持C++11 下载libstdc++库,链接: ht ...

  9. 连接局域网mysql数据库

    1.先确认mysql服务端端口在防火墙是否开放外网连接(添加): windows防火墙 >高级设置 >入站规则 >新建规则 >选择端口 >添加端口 >后面直接下一步 ...

  10. tomcat中的server.xml元素详解

    附:Tomcat加载顺序 加载类和资源的顺序为: 1./Web-INF/classes 2./Web-INF/lib/*.jar 3.Bootstrap 4.System 5.$CATALINA_HO ...