我是靠谱客的博主 靓丽荔枝,最近开发中收集的这篇文章主要介绍Spring bean配置中属性值由String到实际类型的动态转化过程及PropertyEditor类的应用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在配置Spring bean时,你可能会经常发现一些有趣的属性配置问题,如:

<bean id="bean1"  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

                      <property name="locations">

                                 a.properties, :b.properties

                       </property>

</bean>

但PropertyPlaceholderConfigurer的setLocations()方法体却是这样的:

public void setLocations(Resource[] locations) ;

所以这就理所当然有个转换的过程。Spring透明地实现这个转换过程是借助了jdk的PropertyEditor接口以及PropertyEditorSupport support类。对Resource对象而言,Spring有如下类支持:

org.springframework.core.io.ResourceEditor,它的定义是:

public class ResourceEditor extends PropertyEditorSupport{}

Spring除了提供这个便捷类之外,还实现了预先在applition context(注:在bean factory上还不完全有注册)上注册,如下:

AbstractApplicationContext#refresh()方法里:

public void refresh() throws BeansException, IllegalStateException {

...

ConfigurableBeanFactoryUtils.registerResourceEditors(beanFactory, this);

...

}

而ConfigurableBeanFactoryUtils#registerResourceEditors方法如下:

 public static void registerResourceEditors(
   ConfigurableBeanFactory beanFactory, ResourcePatternResolver resourcePatternResolver) {

  registerResourceEditors(beanFactory, (ResourceLoader) resourcePatternResolver);
  beanFactory.registerCustomEditor(Resource[].class,
    new ResourceArrayPropertyEditor(resourcePatternResolver));
 }

 public static void registerResourceEditors(
   ConfigurableBeanFactory beanFactory, ResourceLoader resourceLoader) {

  ResourceEditor baseEditor = new ResourceEditor(resourceLoader);
         beanFactory.registerCustomEditor(Resource.class, baseEditor);
         beanFactory.registerCustomEditor(URL.class, new URLEditor(baseEditor));
         beanFactory.registerCustomEditor(InputStream.class, new InputStreamEditor(baseEditor));
 }

注意的是,web环境下默认使用的XmlWebApplicationContext,以及ClassPathXmlApplicationContext和FileSystemXmlApplicationContext都是从AbstractApplicationContext继承而来,这样在用这些application context时,就默认已经把resource editor给注册好了,这就是最前面的配置中配置string而不配置Resource对象也能通过的原因。这体现了spring的便捷性、灵活性和强大的特点,如果没有这些editor,那么配置将会明显变得复杂,可读性也将变差。

最后

以上就是靓丽荔枝为你收集整理的Spring bean配置中属性值由String到实际类型的动态转化过程及PropertyEditor类的应用的全部内容,希望文章能够帮你解决Spring bean配置中属性值由String到实际类型的动态转化过程及PropertyEditor类的应用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(32)

评论列表共有 0 条评论

立即
投稿
返回
顶部