`

spring BeanWrapperImpl 单个 或 多个 property 赋值

阅读更多
转载自:
http://blog.csdn.net/zyl623/archive/2006/09/17/1232920.aspx
--------------------------------------------------------------

这几天,闲着无事,看起了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。
分享到:
评论
1 楼 wanxiaotao12 2014-02-28  
好文章, spring源码可以深入研究

相关推荐

    Spring Boot自定义配置属性源(PropertySource)

    Spring Boot的自定义配置属性源(PropertySource)是框架中一个强大的特性,它允许开发者引入额外的配置文件或从各种来源获取配置,以满足不同环境的特定需求。配置覆盖是解决多环境配置问题的一种常见策略,它允许...

    Spring配置Freemarker视图解析器,配置多个视图解析器

    本篇文章将深入探讨如何在Spring中配置Freemarker视图解析器,以及如何配置多个视图解析器以实现更灵活的应用场景。 首先,让我们了解如何配置单个Freemarker视图解析器。在Spring的配置文件(如`...

    转:spring多个定时任务quartz配置

    本文将深入探讨如何在Spring中配置多个Quartz定时任务,并结合`quartz.properties`文件进行详细讲解。 首先,我们需要理解Quartz的基本概念。Quartz是开源的作业调度框架,允许应用程序在特定时间执行任务。它支持...

    springboot文件上传(支持单个和多个)

    本教程将详细讲解如何在Spring Boot应用中实现单个和多个文件的上传,并处理与系统兼容性和虚拟路径映射相关的问题。 首先,我们需要在Spring Boot项目中引入相关依赖。在`pom.xml`文件中添加`spring-boot-starter-...

    spring多个定时任务quartz配置

    本文将深入探讨如何在Spring中配置Quartz以实现多个定时任务。 首先,我们需要理解Quartz的基本概念。Quartz是一个开源的工作调度框架,它允许应用程序定义作业(Jobs)和触发器(Triggers),以在指定的时间执行...

    spring1.2 操作多个数据源

    在Spring 1.2框架中,操作多个数据源是一项重要的功能,它允许应用程序根据需求灵活地切换或选择不同的数据源进行数据操作。这在多租户应用、数据隔离或者需要处理来自不同数据库的数据时尤为有用。下面将详细介绍...

    关于spring系统中多系统的配置

    在Spring框架中,我们经常会遇到单个工程需要配置多个子系统的场景。为了更好地管理这些子系统及其配置,Spring提供了多种方式来处理这一问题。本文将详细介绍如何在一个项目中配置多个系统,尤其是在涉及到多个属性...

    Spring+Ibatis 访问多个数据源

    这种情况下,Spring框架提供了强大的支持来管理多个数据源,使得我们可以灵活地根据业务需求切换或同时操作这些数据源。下面将详细介绍如何在Spring中配置和使用多个数据源,以及结合Ibatis进行数据访问。 首先,...

    spring对多个数据库进行事务管理.doc

    Spring 框架确实提供了对多个数据库事务管理的支持,这对于多数据源的应用场景非常关键。在Spring中,事务管理可以通过编程式和声明式两种方式进行。编程式事务管理需要程序员手动控制事务的开始、提交、回滚等操作...

    Spring.Net,Nhibernate多数据库操作

    通过配置Spring的ApplicationContext,我们可以定义多个数据源,并根据需要注入到相应的服务或组件中。例如,可以在XML配置文件中声明不同的DataSource定义,每个定义对应一个数据库连接: ```xml ...

    Spring多数据源配置

    Spring框架提供了灵活且强大的机制来处理这种场景,使得开发者能够在一个应用中集成多个数据源,从而实现数据的分区存储、读写分离、负载均衡等策略。本文将详细探讨如何在Spring环境中配置多个数据源,包括...

    Spring boot + thymeleaf 后端直接给onclick函数赋值的实现代码

    "Spring Boot + Thymeleaf 实现后端直接给 onclick 函数赋值的知识点" Spring Boot 是一个基于 Java 的框架,用于构建基于 Web 的应用程序,而 Thymeleaf 是一个基于 XML 的模板引擎,用于生成 HTML 内容。在 ...

    spring多个定时任务quartz配置 easy518网址导航

    根据提供的信息,我们可以详细解析如何在Spring框架中配置多个基于Quartz的定时任务。Quartz是一个功能强大的开源作业调度库,它可以被应用到Java应用程序中实现复杂调度的需求。本篇文章将深入探讨如何在Spring环境...

    基于Spring2.0的Property OverrideConfig Demo

    - 如果有多个`PropertyOverrideConfigurer`,Spring会按照它们在配置文件中出现的顺序应用属性覆盖。 - 要注意避免循环引用,因为覆盖的属性可能会触发其他bean的初始化,可能导致错误。 通过`...

    Spring Boot 技术知识点:如何理解@PropertySource注解

    在Spring Boot应用中,@PropertySource注解是一个关键的组件,它允许我们从外部源加载属性值,使得我们的配置更加灵活和可维护。这个注解主要用于Spring框架,但与Spring Boot的集成使得它在现代Java应用程序中的...

    Spring_Security_多页面登录配置教程

    ### Spring Security 多页面登录配置教程 #### 一、引言 在开发Web应用程序时,安全性和用户体验同样重要。Spring Security作为一个强大的框架,为开发者提供了丰富的功能来保护Web应用的安全。其中,支持多页面...

    SPRING:bean配置properties

    本文将深入解析如何利用`PropertyPlaceholderConfigurer`进行bean配置的properties操作,包括单个properties文件的配置、多个properties文件的集成以及多个`PropertyPlaceholderConfigurer`的协同工作,旨在帮助...

    spring+mybatis 多个数据源调用示例

    在Spring+Mybatis框架中,实现多个数据源的调用是一项常见的需求,特别是在大型系统或者分布式环境中,可能需要连接不同的数据库来处理不同的业务数据。以下是一个详细的多数据源配置和使用的指南。 首先,我们需要...

    spring多数据源

    在许多实际项目中,我们可能需要连接并操作多个数据库,比如主从数据库、读写分离、不同环境的数据隔离等,这时就需要用到Spring的多数据源支持。 Spring多数据源允许我们在一个应用中同时管理多个数据库连接,通过...

    spring多个定时任务quartz配置.md

    ### Spring 多个定时任务 Quartz 配置详解 #### 一、Spring与Quartz集成概述 Spring 是一款轻量级的 Java 开发框架,而 Quartz 是一个强大的作业调度框架。两者结合可以方便地实现定时任务的功能。通过 Spring 来...

Global site tag (gtag.js) - Google Analytics