博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SPEL语言-Spring Expression Language
阅读量:6806 次
发布时间:2019-06-26

本文共 1245 字,大约阅读时间需要 4 分钟。

Spring表达式语言全称为“Spring Expression Language”,缩写为“SpEL”,类似于Struts 2x中使用的OGNL表达式语言,能在运行时构建复杂表达式、存取对象图属性、对象方法调用等,并且能与Spring功能完美整合,比如能用来配置bean定义。SpEL是单独模块,只依赖于core模块,不依赖于其他模块,可以单独使用

SpEL使用#{…}作为定界符,所有在大框号中的字符都将被认为是SpEL,使用格式如下:

在源码中通过代码prepareBeanFactory-->beanFactory.setBeanExpressionResolver(new StandardBeanExpressionResolver())注册语言解析器,就可以对SPEL进行解析了,那么在注册解析器后Spring又是在什么时候调用这个解析器进行解析呢?

Spring在bean进行初始化的时候会有属性填充的一步,而在这一步中Spring会调用AbstractAutowireCapableBeanFactory类的applyPropertyValues函数来完成功能。就在这个函数中,会通过构造BeanDefinitionValueResolver类型实例valueResolver来进行属性值的解析。同时,也是在这个步骤中一般通过AbstractBeanFactory中的evaluateBeanDefinitionString方法去完成SPEL的解析。

protected Object evaluateBeanDefinitionString(String value, BeanDefinition beanDefinition) {      if (this.beanExpressionResolver == null) {          return value;      }      Scope scope = (beanDefinition != null ? getRegisteredScope(beanDefinition.getScope()) : null);      return this.beanExpressionResolver.evaluate(value, new BeanExpressionContext(this, scope));  }

当调用这个方法时会判断是否存在语言解析器,如果存在则调用语言解析器的方法进行解析,解析的过程是在Spring的expression的包内我们通过查看对evaluateBeanDefinitionString方法的调用层次可以看出,应用语言解析器的调用主要是在解析依赖注入bean的时候,以及在完成bean的初始化和属性获取后进行属性填充的时候。

 

转载地址:http://bvnwl.baihongyu.com/

你可能感兴趣的文章
Mac Appium环境安装
查看>>
android源码分享,布局切换微信提醒对话框下拉刷新Cell进度动画代码下载
查看>>
Hello world!
查看>>
Solidity 函数returns多个值的接收方式 总结
查看>>
基于PCDN技术的无延时直播方案
查看>>
七周二次课
查看>>
安装版JDK后,修改环境变量,也无法生效的原因和解决办法
查看>>
springmvc源码解析MvcNamespaceHandler之<mvc:resources/>
查看>>
希尔排序就这么简单
查看>>
区块链100讲:Solidity语法的重载,继承的定义
查看>>
[HBase] LSM树 VS B+树
查看>>
当移动数据分析需求遇到Quick BI
查看>>
消除非受检警告(24)
查看>>
shell 介绍及命令历史、命令补全和别名
查看>>
ecshop 漏洞如何修复 补丁升级与安全修复详情
查看>>
mongodb
查看>>
CMAKE总结(1) .lib .dll .a .so libx.dll libx.dll.a
查看>>
java读取配置文件*.property
查看>>
how to send mail from 3rd
查看>>
mappingResources、mappingLocations、mappingDirectoryLocations、mappingJarLocations
查看>>