Spring 实战 五: 运行时注入
spring 提供了两种在运行时求值的方式:
- 属性占位符(Property placeholder)
- spring 表达式语言(SpEL)
属性占位符
形式为 “${…}” ,使用 @Value 注解,java 配置需要配置 PropertySourcesPlaceholderConfigurer bean,xml 可通过 开启。
xml 中也可通过 “${…}” 的形式使用。
使用 spring 表达式语言装配
- 使用 bean id 引用其他 bean
- 调用方法和访问对象属性
- 对值进行算术、关系和逻辑运算
- 正则表达式匹配
- 集合操作
SpEL 要放到 “#{…}” 表达式中,在 xml 中也可以使用。
#{T(System).currentTimeMillis()}
T()表达式用于将括号内表达式视为 java 类,能够访问目标类型的静态方法和常量。也直接装配目标类型。
#{envOne.version}
envOne 为 bean 的 id,可获得其可访问成员的值
#{systemProperties[‘jnidispatch.path’]}
systemProperties获取系统属性
#{envOne.getClass().toString().toUpperCase()}
调用 bean 的方法
#{envOne.getStr(true)?.toUpperCase()}
envOne.getStr(true) 返回 null 就不调用 toUpperCase 方法
#{T(java.lang.Math).random()}
调用 java 类的静态方法
字面值
#{3.1415926}
#{‘Hello’}
#{false}
#{9.87E4}
运算符
算术:+ - * / % ^
比较:< > == <= >= lt gt eq le ge
逻辑:and or not |
条件:?: (ternary) ?: (Elvis) 三元运算符,Elvis 表达式
正则:matches