Spring运行时值注入
之前遇到的依赖注入基本都是构造器注入,将一个bean引用注入到另一个bean的属性或者构造器参数中。通常来讲指的是将一个对象与另一个对象进行关联。
bean装配的另一个方面指的是将一个值注入到另一个对象的属性或者构造器参数中。Spring提供了两种在运行时求值的方式:
1)属性占位符
2)Spring表达式语言
1.注入外部的值
1)声明属性源
2)检索属性值
比如@PropertyResource引用一个类路径为app.properties的文件,这个属性文件会加载到Spring的Environment中,然后可以从这里获取属性。
2.Spring的Environment
getProperty()四种重载形式,获取属性,可以返回字符串也可以返回类对象。
3.解析属性占位符
Spring支持将属性定义在外部的属性文件中,并使用占位符值将它插入到Spring bean中。
占位符形式为使用“${……}”包装的属性名称。
如果我们依赖于组件扫描和自动装配来创建和初始化应用组件的话,就没有指定占位符的配置文件或者类了。这种情况下,可以使用@Value注解。
@Value("${alarm.mail.url}") public void setAlarmMailUrl(String url) { AlarmUtil.mailUrl = url; }
将alarm.mail.url作为方法的参数注入进去。
为了使用占位符,必须配置一个PropertyPlaceholderConfigurer bean或者PropertySourcePlaceholderConfigurer bean .
如果使用xml配置的话,Spring context命名空间中的<context:property-placeholder>元素将为我们生成上述的bean。
<context:property-placeholder location="classpath:jdbc.properties,classpath:system.properties" file-encoding="UTF-8"/>
解析外部属性能够将值的处理推迟到运行时。