概述
在配置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类的应用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复