转载自:
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-->
- 浏览: 472038 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (501)
- java基础 (45)
- struts2 (22)
- WebService (9)
- JavaScript (21)
- Java多线程 (37)
- Hibernate (5)
- Spring (31)
- 数据库 (4)
- 软件设计 (1)
- J2ee (8)
- oracle (2)
- Linux (41)
- Hadoop (1)
- Java集合 (3)
- 设计模式 (3)
- 高并发 (1)
- JVM (15)
- xml (2)
- 数据库事务 (3)
- 动态代理 (1)
- tomcat (9)
- 其他 (4)
- DNS域名 (3)
- CDN (2)
- javaapi (1)
- 编码问题 (6)
- CSS样式 (1)
- TCP学习 (3)
- Java IO (6)
- 常见异常问题 (1)
- 网络编程 (1)
- 开发工具 (5)
- Maven (10)
- ibatis (12)
- Velocity (8)
- Jquery (11)
- HTTP (9)
- 中间件 (3)
- 软件管理 (2)
- Html (2)
- Redis (3)
- 服务器 (1)
- 分布式文件系统 (1)
- 异常 (1)
- 杂谈 (1)
- ICE (4)
- cxf (1)
- Apache ActiveMQ (1)
- 好文 (1)
- Json (1)
- junit (2)
- JMS (1)
- java工具 (1)
- memcache (5)
- 加密解密 (1)
- powerdesigner (3)
- Enterprise Architect (1)
- ide (0)
- hessian (3)
- svn (1)
- xstream (1)
- idea (12)
- HttpClient (2)
- solr (4)
- lucene (2)
- 正则 (2)
- 商品设计 (1)
- poi (1)
- nginx (8)
- java基础;Java集合类 (1)
- javassist (1)
- JMeter (1)
- springmvc (1)
- Java对象序列化 (2)
- java nio (4)
- RandomAccessFile (1)
- socket (1)
- netty (3)
- 博客 (1)
- Spring AOP (7)
- mysql (10)
- 远程调用 (2)
- https (3)
- 加密 (3)
- sql (1)
- git (1)
- webx (1)
- eclipse (1)
- 上传下载 (2)
- log4j (4)
- Mac 系统使用 (6)
最新评论
-
wanxiaotao12:
aswang 写道总结的不错,
正在读《java并发编程实战 ...
Java并发编程实战-学习笔记 -
aswang:
总结的不错, 正在读《java并发编程实战》,看到其中的不变性 ...
Java并发编程实战-学习笔记 -
lianhan3344:
感谢博主分享!!!!
深入剖析Tomcat How+Tomcat+Works中文367页.pdf -
vict0323:
真的是酱紫么?求真相
Spring 实际开发项目中, 是否要default-autowire="byName"
发表评论
-
定时任务-时间表达式
2014-10-09 10:24 717字段 允许值 ... -
模板方法与callback
2014-04-16 00:26 653主题:模板方法和Callback回调应用实践-自己动手写J ... -
Spring FactoryBean源码浅析
2014-03-11 18:03 665Spring FactoryBean源码浅析 -
spring中FactoryBean中的getObject()方法的作用
2014-03-11 17:57 713FactoryBean接口定义了以下3个接口方法: ... -
Spring bean生命周期UML图示
2014-03-04 10:40 1023转自:http://blog.csdn.net/redar ... -
spring 生命周期
2014-03-04 09:48 618spring 生命周期 -
Spring 源码学习
2014-02-28 18:08 669Spring源码之旅(4)_BeanWrapper及其实现 -
内省、JavaBean、PropertyDescriptor类、Introspector类、BeanUtils工具包、注解、Rentention、Target、
2014-02-28 15:34 465内省IntroSpector JavaBean主要用于传递 ... -
Spring 源码深度解析
2014-02-27 18:10 1450Spring 源码深度解析 -
使用BeanPostProcessor接口对受管Bean进行预处理
2014-02-27 16:45 742使用BeanPostProcessor接口对受管Bean进 ... -
Spring IoC容器结构的深入分析
2014-02-27 15:43 695Spring IoC容器结构的深入分析 -
Spring AOP 学习
2014-01-24 16:27 652Spring AOP 学习1 Spring ... -
Spring中集成Quartz时遭遇Failure obtaining db row lock异常
2013-08-30 20:17 1384今天在一个新的项目中用Spring集成Quartz来进行任 ... -
Spring的BeanFactoryPostProcessor
2013-08-22 00:09 0BeanFactoryPostProcessor接口: Be ... -
spring工厂方法
2013-08-20 00:43 922问题: 1、某一对象A依赖于接口B, 当使用spring ... -
Spring的CustomEditorConfigurer调用过程(属性编辑器)
2013-08-19 00:58 975问题:如何将在xml文件中,将bean中的一个属性值转化为 ... -
java.beans.PropertyEditor介绍与用法, 类型转换器、属性编辑器
2013-08-16 17:06 1423在很多框架里面, 我们需要将一个字符串转换成对应的对象, ... -
spring IOC学习 链接
2013-08-10 19:25 730spring IOC源码分析(1) 啃啃老菜:Sp ... -
spring 加载xml的用法
2013-08-01 23:39 923因为目前正在从事一个项目,项目中一个需求就是所有的功能都是插件 ... -
spring 的控制反转与依赖注入
2013-02-17 09:29 1003详细参考:http://jinnianshilongnia ...
相关推荐
【模式一:jsp+javaBean】是一种经典的Web开发模式,主要应用于Java Web应用程序。这个模式结合了JSP...通过学习和实践这个模式,开发者可以更好地掌握Web开发的核心技术和设计理念,为后续进阶学习打下坚实基础。
总结,表单数据自动封装到JavaBean涉及到多个层面的技术,包括Web框架的特性利用、数据验证、错误处理以及自定义逻辑。理解并熟练掌握这些技术,能极大地提高开发效率和代码质量。在实际项目中,可以根据需求选择...
JavaBean是一种特殊的Java类,它遵循一定的规范,用于封装...这个名为“javabean”的压缩包文件,很可能是为了帮助你学习和实践JavaBean的编写和使用,通过阅读和分析其中的源码,你可以进一步深化对JavaBean的理解。
Spring 框架是 Java 开发中的一个核心组件,它为构建可维护、模块化和松耦合的应用程序提供了一种强大的方式。Spring 源码注释中文版的提供,使得开发者能够更加深入地理解 Spring 的工作原理,无需经过复杂的编译...
本系统基于Java平台,采用设计模式:MVC(模型--视图--控制),采用的技术:Jsp+JavaBean+Struts+JDBC,数据库:MySQL Struts采用Struts 1.2 版本,MySQL采用MySQL5.0
### 利用反射实现JavaBean的自动赋值 在软件开发过程中,特别是在Web应用程序的开发中,经常会遇到需要将表单提交的数据绑定到JavaBean对象上的需求。这可以通过多种方式实现,例如使用Spring MVC等框架的自动绑定...
适合练手、课程设计、毕业设计的Java项目源码:网上购物系统(JavaBean+Servlet+jsp).rar 适合练手、课程设计、毕业设计的Java项目源码:网上购物系统(JavaBean+Servlet+jsp).rar 适合练手、课程设计、毕业设计的Java...
使用 Java 反射封装 JavaBean <br> 说明:这个程序在没有使用Hiberante时挺有用的 需要一个数据库查询语句 对应的JavaBean的全名(现在是Class,原来Class.getName()) 返回List包含多个JavaBean
例如,如果表单有username和email字段,我们可以定义如下JavaBean: ```java public class UserBean { private String username; private String email; // 构造方法 public UserBean() {} // Getter & ...
1. 创建JavaBean:首先需要创建一个JavaBean,例如CustomBean类,该类包含了city、id、name和street四个属性,每个属性都有getter和setter方法。 2. 封装JavaBean成List:然后,需要将JavaBean封装成List,例如使用...
本项目为基于Spring Boot、Hbase和Kafka的JavaBean封装设计源码,共包含32个文件,涵盖23个Java源文件、4个YAML配置文件、2个XML配置文件、1个Markdown文件、1个Idea项目文件和1个Git忽略文件。该设计以JavaBean形式...
使用java反射机制封装javabean 项目当中使用的一个通用的方法
2. **可重用性**:一个 JavaBean 可以在多个应用程序或项目中重复使用。 3. **平台独立性**:JavaBean 是基于 Java 的,因此可以在任何支持 Java 的平台上运行。 4. **标准接口**:JavaBean 遵循一定的命名约定和...
在提供的压缩包文件"javabean"中,可能包含了多个JavaBean的源代码文件,每个文件代表一个独立的JavaBean实例,通过阅读和理解这些源码,你可以深入了解JavaBean的设计和实现。学习如何定义属性、编写getter和setter...
1. **代码复用性**:通过将数据库操作封装进JavaBean,可以在多个地方重复使用相同的代码逻辑。 2. **可维护性**:当需要修改数据库操作时,只需要更改JavaBean的实现即可,而无需修改调用它的各个部分。 3. **解耦*...
进销存系统:JSP+javabean进销存系统:JSP+javabean进销存系统:JSP+javabean进销存系统:JSP+javabean进销存系统:JSP+javabean进销存系统:JSP+javabean进销存系统:JSP+javabean进销存系统:JSP+javabean
- 了解JavaBean的实现,可以阅读一些开源项目的源码,例如Spring框架中的`BeanWrapper`接口及其实现。 9. **工具支持**: - IDEs如Eclipse和IntelliJ IDEA提供了快速生成getter/setter的方法以及自动生成JavaBean...