转载自:
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。
分享到:
相关推荐
Spring Boot的自定义配置属性源(PropertySource)是框架中一个强大的特性,它允许开发者引入额外的配置文件或从各种来源获取配置,以满足不同环境的特定需求。配置覆盖是解决多环境配置问题的一种常见策略,它允许...
本篇文章将深入探讨如何在Spring中配置Freemarker视图解析器,以及如何配置多个视图解析器以实现更灵活的应用场景。 首先,让我们了解如何配置单个Freemarker视图解析器。在Spring的配置文件(如`...
本文将深入探讨如何在Spring中配置多个Quartz定时任务,并结合`quartz.properties`文件进行详细讲解。 首先,我们需要理解Quartz的基本概念。Quartz是开源的作业调度框架,允许应用程序在特定时间执行任务。它支持...
本教程将详细讲解如何在Spring Boot应用中实现单个和多个文件的上传,并处理与系统兼容性和虚拟路径映射相关的问题。 首先,我们需要在Spring Boot项目中引入相关依赖。在`pom.xml`文件中添加`spring-boot-starter-...
本文将深入探讨如何在Spring中配置Quartz以实现多个定时任务。 首先,我们需要理解Quartz的基本概念。Quartz是一个开源的工作调度框架,它允许应用程序定义作业(Jobs)和触发器(Triggers),以在指定的时间执行...
在Spring 1.2框架中,操作多个数据源是一项重要的功能,它允许应用程序根据需求灵活地切换或选择不同的数据源进行数据操作。这在多租户应用、数据隔离或者需要处理来自不同数据库的数据时尤为有用。下面将详细介绍...
在Spring框架中,我们经常会遇到单个工程需要配置多个子系统的场景。为了更好地管理这些子系统及其配置,Spring提供了多种方式来处理这一问题。本文将详细介绍如何在一个项目中配置多个系统,尤其是在涉及到多个属性...
这种情况下,Spring框架提供了强大的支持来管理多个数据源,使得我们可以灵活地根据业务需求切换或同时操作这些数据源。下面将详细介绍如何在Spring中配置和使用多个数据源,以及结合Ibatis进行数据访问。 首先,...
Spring 框架确实提供了对多个数据库事务管理的支持,这对于多数据源的应用场景非常关键。在Spring中,事务管理可以通过编程式和声明式两种方式进行。编程式事务管理需要程序员手动控制事务的开始、提交、回滚等操作...
通过配置Spring的ApplicationContext,我们可以定义多个数据源,并根据需要注入到相应的服务或组件中。例如,可以在XML配置文件中声明不同的DataSource定义,每个定义对应一个数据库连接: ```xml ...
Spring框架提供了灵活且强大的机制来处理这种场景,使得开发者能够在一个应用中集成多个数据源,从而实现数据的分区存储、读写分离、负载均衡等策略。本文将详细探讨如何在Spring环境中配置多个数据源,包括...
"Spring Boot + Thymeleaf 实现后端直接给 onclick 函数赋值的知识点" Spring Boot 是一个基于 Java 的框架,用于构建基于 Web 的应用程序,而 Thymeleaf 是一个基于 XML 的模板引擎,用于生成 HTML 内容。在 ...
根据提供的信息,我们可以详细解析如何在Spring框架中配置多个基于Quartz的定时任务。Quartz是一个功能强大的开源作业调度库,它可以被应用到Java应用程序中实现复杂调度的需求。本篇文章将深入探讨如何在Spring环境...
- 如果有多个`PropertyOverrideConfigurer`,Spring会按照它们在配置文件中出现的顺序应用属性覆盖。 - 要注意避免循环引用,因为覆盖的属性可能会触发其他bean的初始化,可能导致错误。 通过`...
在Spring Boot应用中,@PropertySource注解是一个关键的组件,它允许我们从外部源加载属性值,使得我们的配置更加灵活和可维护。这个注解主要用于Spring框架,但与Spring Boot的集成使得它在现代Java应用程序中的...
在BaseController里面封装了单个和多个文件的上传后端代码,并且已经修改了重新命名文件的操作,并且设置了上传的单个文件最大值和总的上传文件的大小,自己可以在yml里面进行调整,另外yml还配置了Druid数据源的...
### Spring Security 多页面登录配置教程 #### 一、引言 在开发Web应用程序时,安全性和用户体验同样重要。Spring Security作为一个强大的框架,为开发者提供了丰富的功能来保护Web应用的安全。其中,支持多页面...
本文将深入解析如何利用`PropertyPlaceholderConfigurer`进行bean配置的properties操作,包括单个properties文件的配置、多个properties文件的集成以及多个`PropertyPlaceholderConfigurer`的协同工作,旨在帮助...
在Spring+Mybatis框架中,实现多个数据源的调用是一项常见的需求,特别是在大型系统或者分布式环境中,可能需要连接不同的数据库来处理不同的业务数据。以下是一个详细的多数据源配置和使用的指南。 首先,我们需要...
在许多实际项目中,我们可能需要连接并操作多个数据库,比如主从数据库、读写分离、不同环境的数据隔离等,这时就需要用到Spring的多数据源支持。 Spring多数据源允许我们在一个应用中同时管理多个数据库连接,通过...