Spring自定义属性编辑器——1

  上次我们介绍了Spring的参数解析器,但是它的缺点是需要显示的指定注解,对于参数解析器应该应用于更复杂的参数解析,而Spring的属性编辑器在进行绑定注册后会隐式的帮你进行转换,进一步降低开发成本。
  解析来我们先分析一下自定义属性编辑器中使用的Spring源码,PropertyEditor、PropertyEditorSupport、WebBindingInitializer和BeanPostProcessor。

PropertyEditor

PropertyEditor是属性编辑器的接口,它规定了将外部设置值转换为内部JavaBean属性值的转换接口方法。PropertyEditor主要的接口方法说明如下:

  • Object getValue():返回属性的当前值。基本类型被封装成对应的封装类实例;
  • void setValue(Object newValue):设置属性的值,基本类型以封装类传入;
  • String getAsText():将属性对象用一个字符串表示,以便外部的属性编辑器能以可视化的方式显示。缺省返回null,表示该属性不能以字符串表示;
  • void setAsText(String text):用一个字符串去更新属性的内部值,这个字符串一般从外部属性编辑器传入;
  • String[] getTags():返回表示有效属性值的字符串数组(如boolean属性对应的有效Tag为true和false),以便属性编辑器能以下拉框的方式显示出来。缺省返回null,表示属性没有匹配的字符值有限集合;
  • String getJavaInitializationString():为属性提供一个表示初始值的字符串,属性编辑器以此值作为属性的默认值。

Java为PropertyEditor提供了一个方便类:PropertyEditorSupport,该类实现了PropertyEditor接口并提供默认实现,一般情况下,用户可以通过扩展这个方便类设计自己的属性编辑器。

WebDataBinder

使用WebDataBinder注册控制器级别的PropertyEditor,这种方式注册的PropertyEditor只对当前控制器独享,即其他的控制器不会自动注册这个PropertyEditor,如果需要还需要再注册一下。也可以使用其它方式进行全局注册。

BeanPostProcessor

该接口作用是:如果我们需要在Spring容器完成Bean的实例化,配置和其他的初始化后添加一些自己的逻辑处理,我们就可以定义一个或者多个BeanPostProcessor接口的实现。BeanPostProcessor的作用域是容器级的,它只和所在容器有关。如果你在容器中定义了BeanPostProcessor,它仅仅对此容器中的bean进行后置。它不会对定义在另一个容器中的bean进行任何处理。

public interface BeanPostProcessor {
    //实例化、依赖注入完毕,在调用显示的初始化之前完成一些定制的初始化任务
    Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException;

    //实例化、依赖注入、初始化完毕时执行
    Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException;
}

参考:http://stamen.iteye.com/blog/1525668
参考:http://sishuok.com/forum/blogPost/list/5677.html
参考:http://blog.csdn.net/chensugang/article/details/3423650

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值