这几天,闲着无事,看起了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
<o:p> 这就使得BeanWrapperImpl 也需要继承PropertyEditorRegistrySupport,从字面意义上来说,两个类不是很有关系,其实最主要用到的方法,也就是registerDefaultEditors(),注册spring中所有的属性编辑类。
beans 包中还有两个接口TypeConverter和Mergeable 。TypeConverter由BeanWrapperImpl实现,主要用于转换属性值。其主要的工作由TypeConverterDelegate 这个包内类完成的。Mergeable 主要是用来合并值得,不过具体的实现,在org.springframework.beans.factory.support 包中。
beans 包中提供了两个有用的工具类,BeanUtils和PropertyAccessorUtils。
</o:p>
分享到:
相关推荐
本压缩包“Spring源码解析”提供了对Spring框架核心组件——IOC(Inversion of Control,控制反转)、AOP(Aspect Oriented Programming,面向切面编程)以及Transaction(事务管理)的源码分析,帮助开发者更全面地...
Spring框架是Java开发中不可或缺的部分,其核心组件之一就是`spring-beans`模块。这个模块主要负责Spring容器的创建、管理Bean的生命周期以及依赖注入(Dependency Injection,简称DI)。在本文中,我们将深入探讨`...
Spring源码深度解析第二版 Spring是一款广泛应用于Java企业级应用程序的开源框架,旨在简化Java应用程序的开发和部署。Spring框架的核心主要包括了IoC容器、AOP、MVC框架等模块。 第1章 Spring整体架构和环境搭建 ...
《Spring Beans 模块详解与版本差异分析》 Spring框架是Java开发中广泛使用的轻量级框架,其中Spring Beans模块是其核心组成部分,它负责管理对象的生命周期和依赖注入。本篇文章将深入探讨Spring Beans的功能特性...
《深入剖析Spring Beans与Groovy集成的源码》 在软件开发中,Spring框架以其强大的依赖注入和面向切面编程特性,成为了Java企业级应用的事实标准。而在动态语言的使用上,Groovy凭借其简洁的语法和对Java平台的无缝...
通过对这些模块的源码分析,我们可以深入了解Spring如何实现其强大的功能,并能更好地运用到实际项目中,提升代码质量和可维护性。无论是新手还是经验丰富的开发者,理解Spring的源码都将是一次宝贵的进阶之旅。
总的来说,Spring Beans是Spring框架的核心组件,它提供了IoC和DI的实现,通过容器管理对象生命周期,使我们的代码更加灵活、可维护。配合其他模块,如AOP和Quartz,Spring能为企业级应用提供全方位的支持。理解和...
本文将深入探讨"spring-beans"模块以及与之相关的知识。 首先,理解Bean是什么至关重要。在Spring中,Bean是指由Spring容器管理的对象,它负责创建、初始化、配置和管理这些对象的生命周期。Bean定义了对象的创建...
### Spring源码分析知识点 #### 一、Spring框架概述 Spring框架是一个全面的企业级应用开发框架,它通过一系列模块化的组件来支持不同的应用场景和技术需求。Spring的核心价值在于提供了一种简洁的方式来解决企业...
总之,`org.springframework.beans.factory.config.PropertyPlaceholderConfigurer`是Spring框架中一个核心的配置组件,它简化了应用程序中对环境变量和系统属性的引用,提高了代码的可维护性和安全性。理解并熟练...
今天我们将通过分析“spring beans dtd.zip”这个压缩包中的“spring beans dtd.dtd”文件,来探讨Spring Beans的配置模型,以及它如何与C#编程相结合。 首先,让我们理解DTD(Document Type Definition)的概念。...
二、Spring源码分析 Spring源码的阅读可以帮助我们理解其内部机制,尤其是对于想要进行扩展或定制的人来说。Spring的核心组件如BeanFactory、ApplicationContext、AOP代理等都是源码探索的重点。其中: - **...
以下是对Spring源码的详细解析: 1. **依赖注入(Dependency Injection, DI)**:Spring的核心特性之一,DI允许开发者将对象之间的依赖关系解耦,使得组件更易于测试和管理。在源码中,`org.springframework.beans....
《深入剖析Spring源码:Ant与Maven2构建解析》 Spring框架作为Java开发领域中的核心组件,其源码的深度研究对于提升开发者的技术水平至关重要。本篇文章将围绕标题“spring源码”,深入探讨在Ant和Maven2两种构建...
《Spring源码分析——BeanFactory》 在Java的IoC(Inversion of Control)和DI(Dependency Injection)领域,Spring框架扮演着至关重要的角色。BeanFactory是Spring的核心组件之一,它是容器的基石,负责管理应用...
Spring框架是Java开发中最广泛应用的轻量级框架之一,它以IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)为核心,极大地简化了企业级应用的开发工作。在2022年8月14日...
在Spring框架的开发和学习过程中,源码分析是提升技能的重要环节。然而,有时当我们尝试导入Spring的源码时,可能会遇到编译错误,这通常是因为缺少了必要的依赖jar包。这两个关键的jar包对于理解Spring的工作原理...
通过阅读这些源代码,开发者可以学习到Spring如何实现依赖注入(Dependency Injection,DI),这是Spring的核心特性之一。DI使得对象之间的耦合度降低,提高了代码的可测试性和可维护性。此外,你还能看到AOP(面向...
本篇文章将深入解析Spring源码,聚焦于默认标签的解析,特别是`<bean>`标签的处理流程。 首先,Spring在解析XML配置时,会调用`DefaultBeanDefinitionDocumentReader`类来处理文档中的各个元素。`...