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

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

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

1.1 物料组件

ResourceBeanDefinitionPropertyEditor、及最终的Bean

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

1.2 设备组件

ResourceLoaderBeanDefinitionReaderBeanFactoryPostProcessorInstantiationStrategyBeanWrapper

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

1.3 配合机理

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

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

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

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

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

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

二、BeanDefinition

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

三、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"/>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值