zoukankan      html  css  js  c++  java
  • 使用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)

      本来还想再多写一点,限于时间关系~就写到这儿抛砖引玉吧,如果感兴趣的朋友可以自行尝试其他运算方式。。。

  • 相关阅读:
    EF Load之详讲
    WPF系列 自定控件
    EF6 的性能优化
    WPF系列 Path表示语法详解(Path之Data属性语法)
    WPFTookit Chart 高级进阶
    WPFTookit Chart 入门
    WPF系列-CheckBox
    WPF系列 Style
    ASP.NET MVC 5 with EF 6 上传文件
    WPF Prism
  • 原文地址:https://www.cnblogs.com/shuyuq/p/8488383.html
Copyright © 2011-2022 走看看