Spring容器中的组件,及自定义属性编辑器

Spring容器中的组件,及自定义属性编辑器

文章目录

  • Spring容器中的组件,及自定义属性编辑器
    • 一、Spring容器中的组件及配合机理
      • 1.1 物料组件
      • 1.2 设备组件
      • 1.3 配合机理
    • 二、`BeanDefinition`
    • 三、`InstantiationStrategy`
    • 四、`BeanWrapper`
    • 五、属性编辑器(类型转换器)
    • 六、自定义属性编辑器
      • 6.1 自定义属性编辑器
      • 6.2  注册属性编辑器
      • 6.3 使用自定义的属性编辑器

一、Spring容器中的组件及配合机理

1.1 物料组件

ResourceBeanDefinitionPropertyEditor、及最终的Bean

它们是加工流程中被加工、被消费的组件、就像流水线上被加工的物料一样。

1.2 设备组件

ResourceLoaderBeanDefinitionReaderBeanFactoryPostProcessorInstantiationStrategyBeanWrapper

它们就像流水线上不同环节的加工设备,对物料组件进行加工处理。

1.3 配合机理

(1)ResourceLoader加载配置信息,并使用Resource表示这个配置文件资源;

(2)BeanDefinitionReader读取Resource所指向的配置文件资源,解析配置文件,将每个解析成一个BeanDefinition对象,并保存到**BeanDefinitionRegistry**中;

(3)BeanFactoryPostProcessorBeanDefinition进行加工处理,情况一:对使用占位符的元素标签进行解析,得到最终的配置值。情况二:获取PropertyEditor,将PropertyEditor注册到Spring容器的属性编辑器注册表中;

(4)InstantiationStrategy着手进行Bean实例化工作;

(5)BeanWrapperBean的属性进行设置;

(6)BeanFactoryPostProcessorBean进行后续的寄送处理;

二、BeanDefinition

BeanDefinition就像的镜中人,二者是一一对应。

三、InstantiationStrategy

InstantiationStrategy负责根据BeanDefinition对象创建一个Bean实例。

四、BeanWrapper

Spring委托BeanWrapper完成Bean属性的填充工作。

五、属性编辑器(类型转换器)

Spring在PropertyEditorRegistrySyooirt中为常见属性类型提供了默认的属性编辑器。

六、自定义属性编辑器

6.1 自定义属性编辑器

/**
 * 自定义属性编辑器
 *
 * @Date 2020/5/31
 * @Author lifei
 */
public class CustomCarEditor extends PropertyEditorSupport {
    @Override
    public void setAsText(String text) throws IllegalArgumentException {
        if (text==null || text.indexOf(",")==-1){
            throw new IllegalArgumentException("设置的字符串格式不正确");
        }
        String[] infos = text.split(",");
        Car car = new Car();
        car.setBrand(infos[0]);
        car.setColor(infos[1]);
        car.setMaxSpeed(Integer.parseInt(infos[2]));

        // 调用父类的setValue() 方法设置转换后的属性对象
        setValue(car);
    }
}

6.2  注册属性编辑器


    <bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
        <property name="customEditors">
            <map>
                <entry key="com.hef.beans.Car" value="com.hef.editor.CustomCarEditor"/>
            map>
        property>
    bean>

6.3 使用自定义的属性编辑器


    <bean id="bossCustom" class="com.hef.beans.Boss" p:name="customBoss" p:car="自定义,黑色,137"/>

你可能感兴趣的:(Spring)