`
wanxiaotao12
  • 浏览: 472170 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring 源码学习:BeanWrapperImpl封装JavaBean为单个 或 多个 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。  <!--EndFragment-->

分享到:
评论

相关推荐

    模式一:jsp+javaBean

    【模式一:jsp+javaBean】是一种经典的Web开发模式,主要应用于Java Web应用程序。这个模式结合了JSP...通过学习和实践这个模式,开发者可以更好地掌握Web开发的核心技术和设计理念,为后续进阶学习打下坚实基础。

    表单数据自动封装到javaBean中

    总结,表单数据自动封装到JavaBean涉及到多个层面的技术,包括Web框架的特性利用、数据验证、错误处理以及自定义逻辑。理解并熟练掌握这些技术,能极大地提高开发效率和代码质量。在实际项目中,可以根据需求选择...

    javabean源码

    JavaBean是一种特殊的Java类,它遵循一定的规范,用于封装...这个名为“javabean”的压缩包文件,很可能是为了帮助你学习和实践JavaBean的编写和使用,通过阅读和分析其中的源码,你可以进一步深化对JavaBean的理解。

    spring源码注释中文

    Spring 框架是 Java 开发中的一个核心组件,它为构建可维护、模块化和松耦合的应用程序提供了一种强大的方式。Spring 源码注释中文版的提供,使得开发者能够更加深入地理解 Spring 的工作原理,无需经过复杂的编译...

    :Jsp+JavaBean+Struts+JDBC,jsp网站

    本系统基于Java平台,采用设计模式:MVC(模型--视图--控制),采用的技术:Jsp+JavaBean+Struts+JDBC,数据库:MySQL Struts采用Struts 1.2 版本,MySQL采用MySQL5.0

    利用反射实现JavaBean 的自动赋值

    ### 利用反射实现JavaBean的自动赋值 在软件开发过程中,特别是在Web应用程序的开发中,经常会遇到需要将表单提交的数据绑定到JavaBean对象上的需求。这可以通过多种方式实现,例如使用Spring MVC等框架的自动绑定...

    适合练手、课程设计、毕业设计的Java项目源码:网上购物系统(JavaBean+Servlet+jsp).rar

    适合练手、课程设计、毕业设计的Java项目源码:网上购物系统(JavaBean+Servlet+jsp).rar 适合练手、课程设计、毕业设计的Java项目源码:网上购物系统(JavaBean+Servlet+jsp).rar 适合练手、课程设计、毕业设计的Java...

    Java 反射封装 JavaBean

    使用 Java 反射封装 JavaBean &lt;br&gt; 说明:这个程序在没有使用Hiberante时挺有用的 需要一个数据库查询语句 对应的JavaBean的全名(现在是Class,原来Class.getName()) 返回List包含多个JavaBean

    表单为JavaBean赋值

    例如,如果表单有username和email字段,我们可以定义如下JavaBean: ```java public class UserBean { private String username; private String email; // 构造方法 public UserBean() {} // Getter & ...

    jasperreport学习 之 javabean封装成list作为数据源.pdf

    1. 创建JavaBean:首先需要创建一个JavaBean,例如CustomBean类,该类包含了city、id、name和street四个属性,每个属性都有getter和setter方法。 2. 封装JavaBean成List:然后,需要将JavaBean封装成List,例如使用...

    基于Spring Boot、Hbase和Kafka的JavaBean封装设计源码

    本项目为基于Spring Boot、Hbase和Kafka的JavaBean封装设计源码,共包含32个文件,涵盖23个Java源文件、4个YAML配置文件、2个XML配置文件、1个Markdown文件、1个Idea项目文件和1个Git忽略文件。该设计以JavaBean形式...

    使用反射封装javabean

    使用java反射机制封装javabean 项目当中使用的一个通用的方法

    javabean 学习(适合初学者)

    2. **可重用性**:一个 JavaBean 可以在多个应用程序或项目中重复使用。 3. **平台独立性**:JavaBean 是基于 Java 的,因此可以在任何支持 Java 的平台上运行。 4. **标准接口**:JavaBean 遵循一定的命名约定和...

    javabean实例源码

    在提供的压缩包文件"javabean"中,可能包含了多个JavaBean的源代码文件,每个文件代表一个独立的JavaBean实例,通过阅读和理解这些源码,你可以深入了解JavaBean的设计和实现。学习如何定义属性、编写getter和setter...

    将数据库操作封装到Javabean

    1. **代码复用性**:通过将数据库操作封装进JavaBean,可以在多个地方重复使用相同的代码逻辑。 2. **可维护性**:当需要修改数据库操作时,只需要更改JavaBean的实现即可,而无需修改调用它的各个部分。 3. **解耦*...

    jsp+javabean进销存系统

    进销存系统:JSP+javabean进销存系统:JSP+javabean进销存系统:JSP+javabean进销存系统:JSP+javabean进销存系统:JSP+javabean进销存系统:JSP+javabean进销存系统:JSP+javabean进销存系统:JSP+javabean

    黑马程序员-----javaBean的操作类学习笔记

    - 了解JavaBean的实现,可以阅读一些开源项目的源码,例如Spring框架中的`BeanWrapper`接口及其实现。 9. **工具支持**: - IDEs如Eclipse和IntelliJ IDEA提供了快速生成getter/setter的方法以及自动生成JavaBean...

Global site tag (gtag.js) - Google Analytics