使用Spring表达式语言进行装备--SpEL
本文主要想记录最近的两个使用spring框架实现通过配置文件装备Bean,以及使用SpEL装备Bean。
1.使用配置文件装备Bean:
当我们写某些Bean的时候是希望这个Bean当中的属性是可以通过配置文件配置的,而不是完全写死在程序里面的。这个时候我们可以使用两个类一个注解来解决这个问题:
1):org.springframework.beans.factory.config.PropertiesFactoryBean
2):org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer
这两个类的具体使用方法如下:
<bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<list>
<value>classpath:test.properties</value>
</list>
</property>
</bean>
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
<property name="properties" ref="configProperties"/>
将其配置在spring.xml文件中交给spring容器去管理,其中test.properties为你配置文件所在地址,需填写完整路径。
然后在你需要装备的Bean中的属性上使用@Value注解:
例如:我的properties中配置的属性有name,age那么我就可以使用@Value("${name}")将test.properties中name对应的值注入到我需要的Bean的属性中去。
整个过程是不是非常简单呢~~~
2.SpEL
如果经常写前端的朋友可能会非常熟悉jsp中的EL表达式,现在要给大家介绍的就是Spring的EL表达式~。
需要了解得第一件事情就是SpEL表达式需要放到"#{...}"之中。在EL表达式我们可以直接填入String,boolean,float等类型的值,通过@Value注解实现注入,当然这肯定不能显示出他强大的地方。而事实他更大的方便之处在于可以调用系统类,以及交给spring容器管理的所有Bean;调用这些Bean的属性和方法。例如:
“#{studySpring.name}”
这儿这个studySpring为我所写的一个Bean的ID而name为其中一个String类型的属性。
“#{T(System).currentTimeMillis()}”
这就是调用的系统类,会获得程序运行时的当前系统时间。
甚至可以这样写:
“#{studySpring.name?.toUpperCase()}”
这样做会将name属性的值在不为null的情况下转为大写,而为null的情况下返回null.
"#{studySpring}"
这是直接将ID为studySpring的Bean装配到当前Bean中,可以取代@Autowired
同时,SpEL是支持带运算符的,可以支持算数运算,比较运算,逻辑运算,条件运算以及正则表达式!
算数运算:+、-、*、/、%、^
比较运算:>、<、==、<=、>=、lt、gt、eq、le、ge
逻辑运算:and、or、not、|
条件运算:?:(ternary)、?:(Elvis)
正则表达式:matches
再举一些对应的应用例子:
“#{2*studySpring.age}”
这个例子中存在一个很有趣的事情,如果所引用的studySpring这个Bean中age本身为String类型,那么此处所做的操作是将这个String复制2次,如果*3则是复制3次。如果为任意数字类型则是做算数运算。(若此处使用Value注解复制的话,如果本身为String类型,且不能转为数字类型会报错:org.springframework.beans.factory.BeanCreationException)
本来还想再多写一点,限于时间关系~就写到这儿抛砖引玉吧,如果感兴趣的朋友可以自行尝试其他运算方式。。。
使用Spring表达式语言进行装备--SpEL的更多相关文章
- Spring表达式语言SpEL
Spring表达式语言,简称SpEL,是一个支持运行时查询和操作对象图的强大的表达式语言.语法类似于EL:SpEL使用#{…}作为定界符,所有在大括号中的字符都将被认为是SpEL SpEL为bean属 ...
- Spring表达式语言之SpEL
•Spring 表达式语言(简称SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言. •语法类似于 EL:SpEL 使用 #{…} 作为定界符,所有在大框号中的字符都将被认为是 SpEL ...
- Spring基础13——Spring表达式语言:SpEL
1.SpEL简介 Spring表达式语言(简称SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言.语法上类似于EL:SpEL使用#{...}作为界定符,所有在大框号中的字符都将被认为是Sp ...
- Spring ——表达式语言 Spring Expression Language (转载)
目录 SpEL简介与功能特性 一.为什么需要Spring表达式语言 二.SpEL表达式Hello World! 三.SpEL表达式 3.1.文字表达式 3.2.SPEL语言特性 3.2.1.属性 3. ...
- Spring表达式语言 之 5.1 概述 5.2 SpEL基础(拾叁)
5.1 概述 5.1.1 概述 Spring表达式语言全称为"Spring Expression Language",缩写为"SpEL",类似于Struts ...
- 开涛spring3(5.1&5.2) - Spring表达式语言 之 5.1 概述 5.2 SpEL基础
5.1 概述 5.1.1 概述 Spring表达式语言全称为“Spring Expression Language”,缩写为“SpEL”,类似于Struts2x中使用的OGNL表达式语言,能在运行 ...
- Spring学习笔记--Spring表达式语言SpEL
Spring3引入了Spring表达式语言(Spring Expression Language,SpEL).SpEL是一种强大的.简洁的装配Bean的方式,它通过运行期执行的表达式将值装配到Bean ...
- Spring表达式语言:SpEL
1.Spring表达式语言(简称:SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言. 2.语法类似于EL:SpEL使用#{...}作为定界符,所有在大括号内的字符都被认为是SpEL. 3 ...
- Spring表达式语言SpEL简单介绍
Spring3引入了Spring表达式语言(Spring Expression Language,SpEL). SpEL有非常多特性.比較经常使用的包含: 1.使用bean的id来引用bean, 以下 ...
随机推荐
- Hdu 3001 Travelling 状态DP
题目大意 一次旅游,经过所有城市至少一次,并且任何一座城市访问的次数不能超过两次,求最小费用 每个城市最多访问两次,用状态0,1,2标识访问次数 把城市1~N的状态按照次序连接在一起,就组成了一个三进 ...
- 51nod“省选”模测第二场 C 小朋友的笑话(线段树 set)
题意 题目链接 Sol 直接拿set维护\(li\)连续段.因为set内的区间互不相交,而且每个线段会被至多加入删除一次,所以复杂度是对的. #include<bits/stdc++.h> ...
- Dynamics 365 POA表记录的查询
微软动态CRM专家罗勇 ,回复313或者20190311可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . PrincipalO ...
- gitbook 入门教程之插件介绍
插件是 gitbook 的扩展功能,很多炫酷有用的功能都是通过插件完成的,其中插件有官方插件和第三方插件之分. 推荐官方插件市场 https://plugins.gitbook.com/ 寻找或下载相 ...
- linux(centos7) 常用命令和快捷键 持续验证更新中...
1.文件和目录cd 进入目录示例:cd /home 进入home目录 cd.. 返回上一级目录cd../.. 返回上两级目录cd - 返回上次所在目录cd ~ 返回根目录 ...
- 从0开始的Python学习004小的总结与补充
没有时间?快速阅读: Python确实是一种十分精彩又强大的语言. Python是程序.脚本或者软件 python helloworld.py运行你的Python help()帮助你的Python 命 ...
- python 实例六
https://www.cnblogs.com/evablogs/p/6783498.html 题目:斐波那契数列. 程序分析:这个数列从第3项开始,每一项都等于前两项之和.故 n=1,2,f=1 n ...
- PostgreSql 查询表结构和说明
select (select relname from pg_class where oid=a.attrelid) relname , () as comment from pg_class whe ...
- Allowed memory size of 134217728 bytes exhausted解决办法(php内存耗尽报错)【简记】
报错: PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 72 bytes) i ...
- LeetCode算法题-To Lower Case(Java实现)
这是悦乐书的第301次更新,第320篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第169题(顺位题号是709).实现具有字符串参数str的函数ToLowerCase() ...