重庆当地网站,邢台市建设银行网站,设计师 必备的网站,全球快速建站工具图解 Spring 核心数据结构#xff1a;BeanDefinition 简介 使用spring框架的技术人员都知道spring两个大核心技术IOC和AOP#xff0c;随着投入更多的时间去学习spring生态#xff0c;越发觉得spring的发展不可思议#xff0c;一直都是引领着Java EE的技术变革#xff0c;这…图解 Spring 核心数据结构BeanDefinition 简介 使用spring框架的技术人员都知道spring两个大核心技术IOC和AOP随着投入更多的时间去学习spring生态越发觉得spring的发展不可思议一直都是引领着Java EE的技术变革这样一系列优秀的框架我们应该花多一点时间去深入思考spring生态的发展学习spring中优秀的设计思想。以前学习spring我们都是梳理一下spring bean的生命周期debug一下spring aop的源码最近想想感觉完全不够深入所以近期想着出一系列文章以图解的方式细致入微的去理解spring的每一个细节本篇将围绕BeanDefinition的设计这一细节展开讲解希望对读者有所启发。
一、spring bean是什么 使用了这么久的spring框架那么spring bean是什么呢我们都知道spring ioc会载入和管理我们的bean我理解bean实际就是我们程序中使用的对象初学spring的时候经常被问到不用spring我们是怎么开发的没有spring我们使用对象的时候自己new一旦该对象不再被使用则由 Java 自动进行垃圾回收。简单的描述我们是不是感觉spring bean没什么神秘了就是我们new的对象。 Spring 中的对象是 beanbean实际上就是我们new的对象只不过 Spring 不再自己去 new 对象了而是由 IoC 容器去帮助我们实例化对象并且管理它我们需要哪个对象到IoC 容器里获取即可。IoC 其实就是解决对象之间的耦合问题Spring Bean 的生命周期完全由容器控制。 我们对spring bean有了一些概念之后那我们是否好奇spirng bean是以什么新式存储的呢
二、BeanDefinition的设计 在Spring框架中定义了一个BeanDefinition接口用于描述和配置Spring容器中的Bean用于定义Bean的配置元数据包括类名、作用域、构造函数参数、属性值、初始化方法、销毁方法和依赖关系等信息BeanDefinition提供了一种抽象使得开发者能够以声明性的方式描述如何实例化、配置和组装一个特定的Bean。 随着技术的发展BeanDefinition接口得到了极大的发展丰富继承体系如下图所示 1、AttributeAccessor: 提供对 BeanDefinition 属性操作能力。 2、AttributeAccessorSupport: 使用了 Map 进行属性的存储的。 3、BeanMetadataAttributeAccessor: 代表了一个 Bean 元数据的属性操作。 4、BeanMetadataElement: BeanDefinition 元数据返回该 Bean 的来源。 5、BeanDefinition: 用来描述 Bean里面存放 Bean 元数据比如 Bean 类名、scope、属性、构造函数参数列表、依赖的 Bean、是否是单例类、是否是懒加载等一些列信息。 6、AbstractBeanDefinition: 抽象类统一实现了 BeanDefinition 定义的一部分操作可以说是定义了 BeanDefinition 很多默认的属性。 7、RootBeanDefinition: 代表一个 XMLJava Config来的 BeanDefinition。 8、AnnotatedBeanDefinition: 表示注解类型 BeanDefinition。有两个重要的属性AnnotationMetadata、MethodMetadata 分别表示 BeanDefinition 的注解元信息和方法元信息。实现了此接口的 BeanDefinition 可以获取到注解元数据和方法元数据。 9、ChildBeanDefinition: 可以让子 BeanDefinition 定义拥有从父母那里继承配置的能力。 10、GenericBeanDefinition: 是 Spring 2.5 之后才有的这个的想法是用来替代 RootBeanDefinition/ChildBeanDefinition而 RootBeanDefinition/ChildBeanDefinition 可以在 Spring 预加载的时候使用。 11、AnnotatedGenericBeanDefinition: 表示 Configuration 注解注释的 BeanDefinition 类。是 AnnotatedBeanDefinition 的一个具体实现。传入指定类后可以获取类中的注解。 12、ScannedGenericBeanDefinition: 表示 Component、Service、Controller 等注解注释的 Bean 类。是 AnnotatedBeanDefinition 的另一个实现与 AnnotatedGenericBeanDefinition 不同的是ScannedGenericBeanDefinition 是通过扫描 class然后操作 ASM 进行解析的。
总结 本篇简单介绍了spring bean的相关概念以及初步分析了BeanDefinition的设计理论概念性的内容总是枯燥乏味的为了不影响文章的可读性本篇先介绍到这里后续再出文章进行补充讲解。