Spring bean配置中属性值由String到实际类型的动态转化过程及PropertyEditor类的应用
来源:互联网 发布:我的王妃是男人网络剧 编辑:程序博客网 时间:2024/06/07 23:31
在配置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配置自定义的PropertyEditor
- 动态设定Spring中bean的属性
- Spring boot将配置属性注入到bean类中
- Spring boot将配置属性注入到bean类中
- Spring的bean属性配置
- spring 强大的PropertyEditor
- Spring的自定义PropertyEditor
- 探秘Spring的PropertyEditor
- Spring配置中的bean引用其它bean的属性值
- Spring学习笔记——Spring如何装配各种类型的属性以及实际应用
- Spring注入Date类型的数据到Bean中
- Spring中bean的集合属性的配置
- Spring配置中 bean上的属性parent的作用
- Spring PropertyEditor 相关类的模拟实现
- Spring配置中<bean>的id和name属性
- Spring配置中<bean>的id和name属性区分
- Spring配置中<bean>的id和name属性区分
- fifo1.c
- linux 集图(3)
- linux 集图(4)
- linux 集图(5)
- linux 集图(6)
- Spring bean配置中属性值由String到实际类型的动态转化过程及PropertyEditor类的应用
- tomcat5.5.9的安装与配置(转贴)
- 开始更新!!!
- 《遗蝶门》楔子:遗蝶门的故事
- 批处理文件给文件夹下文件批量改名
- myeclipse中J2EE项目之间的组织结构
- weblogic程序移植到jboss上的一个问题解决方法,j2ee,原创
- javaScript的一些应用
- 中国古代有句话