Spring之BeanWrapper和EL

Spring之BeanWrapper和EL

BeanWrapper在Spring内部使用的地方非常多,因此有必要对其做简要的说明。另外Spring EL 是一种强大的表达式语音,支持在运行时对对象进行操作,这里也对其做简要说明。

BeanWrapper

BeanWrapper接口及其实现,方便的提供了获取bean的属性,设置属性、获取属性描述的方法。

以下示例:

System.out.println("----------test BeanWrapper---------");
      BeanWrapper wrapper = new BeanWrapperImpl(new User(100, "test1"));
     
      System.out.println(wrapper.getPropertyValue("id"));//输出100
      PropertyValue v = new PropertyValue("id", 101);
     
      wrapper.setPropertyValue(v);
     
      System.out.println(wrapper.getPropertyValue("id"));//输出101

PropertyEditor

PropertyEditor是javaBean 标准定义的接口,spring使用它来把String转换为对象。之前的文章提过,基本类型的依赖注入(通过value属性)就使用了内置的PropertyEditor.

Spring使用了自己内置和javaBean标准内置的PropertyEditor,并把他们注册到Beanwrapper以供使用。见下图Spring内的实现,从名字可以看出其将要转化的类型,如ByteArrayPropertyEditor将字符串转化为 Byte数组。


Spring通过PropertyEditorManager来设置可能需要的propertyEditor的搜索路径,包括javabean标准和spring内置的,另外标准的命名也可以被自动搜索到,如

com
  chank
    pop
      Foo
      FooEditor // the PropertyEditor for the Foo class


当然可以自定义并注册自己的PropertyEditor。通过这么做,可以把string转换为我们自己需要类型。这里省略。

Spring TypeConversion

Spring从3.0开始提供了统一的类型转换接口,他作为另外一种可以替换propertyeditor的转换外部bean的方式。基本接口定义及其简单。

package org.springframework.core.convert.converter;
public interface Converter<S, T> {
    T convert(S source);
}


这部分的详细内容涉及到SpringMVC等内容,关于详细请看博客:http://blog.csdn.net/renhui999/article/details/9837897

EL

Spring表达式可以用在bean定义中,从而配置更加灵活的bean。首先看下,其支持的操作吧:


表达式接口

通过表达式接口求值,我们一直在程序中很少这么用,只有spring框架内才会这么用。示例如下:

ExpressionParser parser = new SpelExpressionParser();
Expression exp = parser.parseExpression("'Hello World'");
String message = (String) exp.getValue();

上面的示例是求字面字符串常量。

其他复杂例子不再举例。

配置bean

#{表达式}如下配置:

<bean id="numberGuess" class="org.spring.samples.NumberGuess">
    <property name="randomNumber" value="#{ T(java.lang.Math).random() * 100.0 }"/>
    <!-- other properties -->
</bean>


注解配置:

@Value("#{ systemProperties['user.region'] }")
    private String defaultLocale;


结束

本篇文章极其简单的介绍了Spring中的beanWrapper、类型转换、表达式。其中类型转换极其重要,但是容易理解,本篇简单介绍的原因只是为了形成初步的印象,至于深入研究可以研究文章中的链接博文和源码,都是简单明了的。至于表达式,我其实很想知道它有多大的用处,感觉有点鸡肋。当然个人见解,很可能是没有理解到位。这里只是简单的走马观花,知道有这个东西,需要详细了解可以参考官方文档。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值