持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情
PropertyOverrideConfigurer
相比于PropertyPlaceholderConfigurer,PropertyPlaceholderConfigurer 可以通过占位符来将bean 中的property 和Properties 文件中的配置内容进行关联。
PropertyPlaceholderConfigurer 看起来是从“明显”的方面来完成这件事,但是PropertyOverrideConfiurer 就是“暗戳戳”地完成这个功能的。
PropertyOverrideConfiurer 是可以对容器中配置过的任何bean 定义的property 信息进行替换。使用的时候有一定的规则,如:对应的properties 文件中的键是以XML 文件中配置的bean 定义的beanName 作为开始标识的(即通常说的id 指定的值),后面跟着的是被覆盖的property 的名称。具体使用如果读者有兴趣可以自行查询。这里仅仅做一个概念性的引入。另外,当对同一个bean 的同一个property 有多个PropertyOverrideConfiurer 的配置的时候,仅仅最后一个生效。
CustomEditorConfigurer
对于前面两个BeanFactoryPostProcessor 来说,它们都是通过对BeanDefinition 中的数据进行变更来达到自己的目的。
但是对于CustomEditorConfigurer 来说,它却是另外一种类型的BeanFactoryPostProcessor 实现,它的实现流程是将后期会用到的一些信息注册到容器中去,但是对BeanDefinition 来说却没有任何改动。
事实上,不论对象是什么类型,或者说这些对象依赖了什么类型的其他对象,通常都是使用XML 文件或者其他类型的格式的文件进行声明的。但是这些文件都是使用String 类型(字符串类型)来记载相关信息的,但是最终的程序却是由各种各样类型的对象构成的。如果想完成这种由字符串到具体某种对象的转换操作,就一定需要一些“转换规则”来约束。
CustomEditorConfigurer 对我们来说就是负责完成这个工作的,帮助我们传达这种信息。
在Spring 内部,JavaBean 的PropertyEditor 的作用就是来将String 类型转换成其他类型的。我们只要给每种对象类型提供一个PropertyEditor,那么在具体使用的时候,我们只需要根据那个对象类型来取得对应的PropertyEditor 就好,然后做具体的类型转换。
Spring 默认提供了几种PropertyEditor,容器通常会直接默认进行使用。但是如果我们想指定某种特定的PropertyEditor 的实现的时候,就可以通过CustomEditorConfigurer 来告知容器。
由于技术的快速迭代和发展,这些功能现在已经不太使用了,但是我们有必要了解一下它的思想。所以说,具体的使用方法这里就不做过多介绍了。