Spring体系总结(二):BeanWrapper

1、BeanWrapper简介

  • Spring中两个非常关键的接口,一个是BeanDefinition和BeanWrapper,其中BeanDefinition是对于定义好的Bean进行一个再描述,使Spring运行过程中方便实例化其对象Bean以及其它操作,而BeanWrapper这个接口主要用来操作一些标准的JavaBeans,比如设置获取部分的描述参数,是一个包装类,包装Bean。
  • 对Bean属性的操作,封装了一个bean的行为,诸如设置和获取属性值等,大家熟知的主要有下面的工具类(Apache的BeanUtils和PropertyUtils、cglib的BeanMap和BeanCopier、spring的BeanUtils),但是Spring里有有一个更加强大的BeanWrapper操作类(支持设置嵌套属性、支持属性值的类型转换(设置ConversionService)。

2、BeanWrapper包装过程

  • 要顺利地填充Bean属性,除了目标Bean实例和属性编辑器外,还需要获取Bean对应的BeanDefinition,它从Spring容器的BeanDefinitionRegistry中直接获取。Spring主控程序从BeanDefinition中获取Bean属性的配置信息PropertyValue,并使用属性编辑器对PropertyValue进行转换以得到Bean的属性值。对Bean的其他属性重复这样的步骤,就可以完成Bean所有属性的注入工作。BeanWrapperImpl在内部使用Spring的BeanUtils工具类对Bean进行反射操作,设置属性。
  • BeanWrapper还有两个顶级类接口,分别是PropertyAccessor和PropertyEditorRegistry。PropertyAccessor接口定义了各种访问Bean属性的方法,如setPropertyValue(String,Object)、setPropertyValues(PropertyValues pvs)等;而PropertyEditorRegistry是属性编辑器的注册表。所以BeanWrapper实现类BeanWrapperImpl具有三重身份:一个BeanWrapperImpl实例内部封装了两类组件:被封装的待处理的Bean,以及一套用于设置Bean属性的属性编辑器。

3、运用

==
BeanWrapper beanWrapper = PropertyAccessorFactory.forBeanPropertyAccess( obj);
beanWrapper.setConversionService(conversionService); //值类型转换,跟spring mvc无缝集成
beanWrapper.setAutoGrowNestedPaths( true); //对于null值,是否自动创建新对象
beanWrapper.setPropertyValue("a[0].b[dd].a", "value");
==
   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); 
  • beans 包中还有两个接口TypeConverter和Mergeable 。TypeConverter由BeanWrapperImpl实现,主要用于转换属性值。其主要的工作由TypeConverterDelegate 这个包内类完成的。Mergeable 主要是用来合并值得,不过具体的实现,在org.springframework.beans.factory.support 包中。
  • beans 包中提供了两个有用的工具类,BeanUtils和PropertyAccessorUtils。

 

以上部分内容来源网络整理

 

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值