spring 代码分析之 beans

    这几天,闲着无事,看起了spring的源码,顺便也学习一下,人家的设计理念。
    spring的源码还是比较多的,但是区分的层次比较可以。对比了一下自己设计的程序,有点惭愧,每次分包的时候,设计的都比较烂。
    闲话少说,先来看看spring 的核心包beans。
    beans 包主要提供了接口和类用于处理java beans。
    其中最主要的接口是BeanWrapper:
    Spring 的中心接口,用于访问javabeans 的低层操作。默认实现为BeanWrapperImpl 提供分析和处理标准java beans 用于get 和set 属性,取得属性描述,查询属性的读/写能力。
    用法非常简单
    TestBean tb = new TestBean();
    BeanWrapper bw = new BeanWrapperImpl(tb);
    bw.isReadableProperty("age");//判断age属性是否可读
    bw.setPropertyValue("name", "tom"); //设置name属性的值为tom
    bw.getPropertyValue("int2")//取得属性
    //当然,最强大的是能嵌套设置属性,如:
    //tb中有个spouse的属性,也为TestBean,这样
    bw.setPropertyValue("spouse.name", "tom"); 
    //等价于tb.getSpouse().setName("tom");
    //bw 同样支持数组和集合,map属性设置
    bw.getPropertyValue("array[0].name");
    bw.getPropertyValue("map[key4][0].name");
    
    beans包 还提供了一个PropertyValues用于保存多个属性值,默认的实现MutablePropertyValues 
    MutablePropertyValues pvs = new MutablePropertyValues();
    pvs.addPropertyValue("array[0].name", "name5");
    pvs.addPropertyValue("array[1].name", "name4");
    bw.setPropertyValues(pvs);
   
    BeanWrapper的层次结构,也比较简单继承于ConfigurablePropertyAccessor ,而ConfigurablePropertyAccessor 又继承于PropertyAccessor 和   PropertyEditorRegistry 接口。
   有一点不太明白,为什么ConfigurablePropertyAccessor 要继承于PropertyEditorRegistry 
    PropertyEditorRegistry 的主要作用是提供方法用于注册JavaBeans PropertyEditors。默认的实现为PropertyEditorRegistrySupport
   这就使得 BeanWrapperImpl 也需要继承PropertyEditorRegistrySupport,从字面意义上来说,两个类不是很有关系,其实最主要用到的方法,也就是registerDefaultEditors(),注册spring中所有的属性编辑类。
   beans 包中还有两个接口TypeConverter和Mergeable 。TypeConverter由BeanWrapperImpl实现,主要用于转换属性值。其主要的工作由TypeConverterDelegate 这个包内类完成的。Mergeable 主要是用来合并值得,不过具体的实现,在org.springframework.beans.factory.support 包中。
   beans 包中提供了两个有用的工具类,BeanUtils和PropertyAccessorUtils。


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值