Spring 系列篇之表达式语言(SpEL)

作者&投稿:长兴仇 (若有异议请与网页底部的电邮联系)
~

Spring 表达式语言(SpEL)支持在运行时查询和操作对象。本篇文章我们来学习,如何使用SpEL,并简单介绍下,他在IoC容器中,扮演什么角色。

首先我来看一张类图,图中红框标注的是SpEL中重要的角色(接口)。

可以看到当我们需要使用SpEL时,需要有这几步操作

创建parse对象

定义表达式执行上下文

解析字符串为List

解析字符串为Map

解析执行方法,这里需要注意 #plus ,当我们需要引用变量时需要加 # 号

模板表达式,这里需要注意的是,我们需要定义模板格式,也就是需要告知解析器哪些是需要解析成表达式的,这个格式定义需要实现 ParseContext 接口, ParserContext.TEMPLATE_EXPRESSION 是Spring提供的默认格式(表达式需要用 #{expression} )

Spring 容器中也是支持SpEL的。因为在 AbstractApplicationContext.prepareBeanFactory 方法中会添加 BeanExpressionResolver (Bean定义的表达式解析接口)对象值, BeanExpressionResolver 本身是一个接口,定义如下,其主要作用就是根据一个表达式解析出对象。他的实现类是 StandardBeanExpressionResolver

StandardBeanExpressionResolver 内部是包装了 ExpressionParser 对象,我们在看看 evaluate 的实现,可以确定的是 StandardBeanExpressionResolver 对象解析也是使用了SpEL。

还记得 @Value 这个注解么,我们经常用他来对我们的属性赋值,如下

是直接给变量赋 name

是获取容器中b对象age属性值

是获取配置文件中name值




阿合奇县19356079594: spring表达式语言重要吗 -
励梁槟榔: spring表达式语言重要.Spring 表达式语言 (Spring Expression Language)是Spring 3.0开始引入的,它是一种强大、简洁的装配Bean的方式,能在运行时执行表达式将值(包括引用)注入到Bean.SpEL的特性包括:使用Bean的ID引用调用方法或访问属性进行算术、逻辑或关系运算正则表达式集合操作

阿合奇县19356079594: 如何用Spring 3.0表达式语言参数化@Scheduled -
励梁槟榔: @Scheduled(fixedDelay = 5000) public void readLog(){... } $ b不幸的是,通过Spring表达式语言(EL)的手段,@Value返回一个String对象,它在根据fixedDelay参数的要求,无法自动转换为长整型.

阿合奇县19356079594: 我想知道:spring表达式语言如何简化spring配置? -
励梁槟榔: 注入~~注入简化了XML的配置!!如果你还有什么详细要问的你可以留言

阿合奇县19356079594: spring spel 表达式怎么使用 -
励梁槟榔: Spring的IOC本质就一个容器,也就是一个对象的工厂,我们通过配置文件注册我们的Bean对象,通过他进行对象的组装与床架.SpEL表达式就是一种字符串编程,类似于JS里面的EVAL的作用, 通过它可以运行字符串内容 特点:算是一种动...

阿合奇县19356079594: spring的切面表达式怎么理解 -
励梁槟榔: 0 execution(* com.service.*.*(..))1.第一个*代表方法的返回值 *代表任意返回值2. com.service.*.* 代表com.service下面的1级子包和2级子包 例如 com.service.a.Class, com.service.b.Class 这些包下面的类都能匹配到3. 最后的(..)代表方法的任意参数

阿合奇县19356079594: 什么是spring -
励梁槟榔: 1.1.1 Spring是什么Spring是一个开源的轻量级Java SE(Java 标准版本)/Java EE(Java 企业版本)开发应用框架,其目的是用于简化企业级应用程序开发.应用程序是由一组相互协作的对象组成.而在传统应用程序开发中,一个完整的应用是由...

阿合奇县19356079594: spring切入点表达式有哪些 -
励梁槟榔: Pointcut 是指那些方法需要被执行"AOP",是由"Pointcut Expression"来描述的. Pointcut可以有下列方式来定义或者通过&& || 和!的方式进行组合. args() @args() execution() this() target() @target() within() @within() @annotation 其中...

阿合奇县19356079594: spring 2.5和3.5的区别 -
励梁槟榔: 一、首先,模块的组织更加的细致,从那么多的jar分包就看的出来 二、新特性如下: Spring Expression Language (Spring表达式语言) IoC enhancements/Java based bean metadata (Ioc增强/基于Java的bean元数据) General-purpose type ...

阿合奇县19356079594: spring 和springMVC的区别 -
励梁槟榔: springmvc只是spring其中的一部分. spring 可以 支持 hibernate ,ibatis ,JMS,JDBC支持事务管理, 注解功能,表达式语言,测试 springmvc 就是一个简单的web 框架,上手很快,可以代替SSH框架.springmvc 比 struts2 性能优一些.

阿合奇县19356079594: Spring aop 配置的表达式意思??? -
励梁槟榔: execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?) 除了返回类型模式(上面代码片断中的ret-type-pattern),名字模式和参数模式以外,所有的部分都是可选的. 返回类型模式...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网