`

Spring IOC 源码-bean解析

阅读更多

spring  bean的解析及创建过程:
(1)元数据层(xml anotation )

(2)逻辑定义层(解析元素,将结果汇总到beandefination,定义对象初始化逻辑和依赖关系,发生在Beanfactory初始化时候)


(3)应用层(bean加载 将bean初始化成对象,发生在getBean时候)

1、元数据到BeanDefination的解析过程
DefaultListableFactory 的registerBeanDefinition方法将从xml中解析的beanName和beanDefinition(GenericBeanDefinition)注册到一个在内存中的map:beanDefinitionMap

1)bean创建的入口:


 
2)创建beanFactory的构造方法中会同时会调用XmlBeanDefinitionReader的loadBeanDefinitions方法,去读取Xm配置文件,加载beanDefination


 
3)loadBeanDefinitions方法会调用doLoadBeanDefinitions方法


 
4)doLoadBeanDefinitions方法首先把xm文件 解析成Document对象,再调用registerBeanDefinitions方法,将document对象和resource作为参数
 

 
5)再来看registerBeanDefinitions方法,这个方法最关键的地方在BeanDefinitionDocumentReader的registerBeanDefinitions

 
6)BeanDefinitionDocumentReader的registerBeanDefinitions,BeanDefinitionDocumentReader是一个接口 有以下几个实现类:DefaultBeanDefinitionDocumentReader

6)DefaultBeanDefinitionDocumentReader中调用doRegisterBeanDefinitions方法



 
 
7)parseBeanDefinitions 中解析xm元素,我们比较关注的是对于bean以及property的解析,此处进去以后会调用,依次解析bean的属性,将解析好的属性放到AbstractBeanDefinition中


 
8)AbstractBeanDefinition有以下子类,使用的是GenericBeanDefinition,最终将得到的BeanDefinition和beanClass统一放到BeanDefinitionHolder中去

 



 
9)BeanDefinitionHolder的结构是:


 
 
10)bean解析完成后会调用BeanDefinitionReaderUtils.registerBeanDefinition(bdHolder, getReaderContext().getRegistry());



 
11)registerBeanDefinition方法的实现如下:
其中register的定义-BeanDefinitionRegistry 是一个接口,主要的实现类包括:


 
12)进入到DefaultListableBeanFactory:在这个方法中将beanDefinition最终注册到beanDefinitionMap里面去,此处并没有对 bean进行实例化,

public void registerBeanDefinition(String beanName, BeanDefinition beanDefinition)
            throws BeanDefinitionStoreException {

        Assert.hasText(beanName, "Bean name must not be empty");
        Assert.notNull(beanDefinition, "BeanDefinition must not be null");

        if (beanDefinition instanceof AbstractBeanDefinition) {
            try {
                ((AbstractBeanDefinition) beanDefinition).validate();
            }
            catch (BeanDefinitionValidationException ex) {
                throw new BeanDefinitionStoreException(beanDefinition.getResourceDescription(), beanName,
                        "Validation of bean definition failed", ex);
            }
        }

        synchronized (this.beanDefinitionMap) {
            Object oldBeanDefinition = this.beanDefinitionMap.get(beanName);
            if (oldBeanDefinition != null) {
                if (!this.allowBeanDefinitionOverriding) {
                    throw new BeanDefinitionStoreException(beanDefinition.getResourceDescription(), beanName,
                            "Cannot register bean definition [" + beanDefinition + "] for bean '" + beanName +
                            "': There is already [" + oldBeanDefinition + "] bound.");
                }
                else {
                    if (this.logger.isInfoEnabled()) {
                        this.logger.info("Overriding bean definition for bean '" + beanName +
                                "': replacing [" + oldBeanDefinition + "] with [" + beanDefinition + "]");
                    }
                }
            }
            else {
                this.beanDefinitionNames.add(beanName);
                this.frozenBeanDefinitionNames = null;
            }
            this.beanDefinitionMap.put(beanName, beanDefinition);

            resetBeanDefinition(beanName);
        }

    }

 

  • 大小: 24.2 KB
  • 大小: 73 KB
  • 大小: 75.8 KB
  • 大小: 49.6 KB
  • 大小: 50.4 KB
  • 大小: 15.9 KB
  • 大小: 55.3 KB
  • 大小: 55.9 KB
  • 大小: 53.6 KB
  • 大小: 95.9 KB
  • 大小: 93.1 KB
  • 大小: 63.9 KB
  • 大小: 20.8 KB
  • 大小: 35.3 KB
  • 大小: 81.1 KB
  • 大小: 23.7 KB
分享到:
评论

相关推荐

    Spring IoC源码深度剖析开源架构源码2021.pdf

    标题《Spring IoC源码深度剖析开源架构源码2021.pdf》和描述《Spring IoC源码深度剖析开源架构源码2021.pdf》表明该文档主要面向于分析Spring框架中控制反转(IoC)容器的核心源码,解析和理解其内部的工作机制及...

    spring-security-web源码所需jar包

    《Spring Security Web源码解析与相关依赖》 Spring Security Web是Spring Security框架的重要组成部分,它主要负责Web应用程序的安全性,包括认证和授权等核心功能。本文将深入探讨Spring Security Web的源码,并...

    Spring IOC源码解读

    Spring IOC,即Inversion of Control(控制反转),是Spring框架的核心特性之一,它负责管理和装配应用程序中的对象。...理解并掌握Spring的IOC源码,对于深入学习Spring框架以及提升系统设计能力具有重要意义。

    Spring ioc源码解读

    ### Spring IoC源码解读 #### 一、Spring IoC 容器概述 Spring框架的核心功能之一便是依赖注入(Dependency Injection, DI),而这一功能主要通过IoC容器来实现。在Spring框架中,IoC容器负责管理应用对象的生命...

    spring-framework-master

    《Spring框架深度解析》 Spring Framework,作为Java开发领域中的基石,是企业级应用开发的首选框架。"spring-framework-master"这一压缩包包含了Spring框架的完整源码,为我们提供了深入理解这一强大工具的绝佳...

    官方原版源码spring-framework-5.1.4.RELEASE.zip

    《Spring Framework 5.1.4源码深度解析》 Spring Framework是Java开发中的核心框架,它为构建高质量的企业级应用提供了全面的支持。5.1.4版本是Spring的重要里程碑,引入了诸多新特性和改进,旨在提升性能、增强可...

    Spring Ioc源码分析系列--自动注入循环依赖的处理.doc

    Spring Ioc 源码分析系列--自动注入循环依赖的处理 本篇文章主要讲解了 Spring Ioc 源码分析系列中自动注入循环依赖的处理机制。循环依赖是 Spring 框架中一个经典的问题,也是面试中常被问到的问题。本篇文章将...

    官方源码 spring-framework-5.3.2.zip

    Spring的IoC(Inversion of Control)容器和AOP(Aspect-Oriented Programming)支持在5.3.2中得到加强,包括对Java配置的优化,以及对注解的更精细控制。此外,还增强了Bean生命周期管理,如条件化 Bean 的创建和...

    spring源码spring-framework-4.3.2.RELEASE

    《Spring框架4.3.2.RELEASE源码深度解析》 Spring框架,作为Java领域最为广泛应用的开源框架之一,以其强大的功能和灵活的设计理念深受开发者喜爱。4.3.2.RELEASE是Spring的一个稳定版本,它包含了许多重要的改进和...

    spring-framework-1.0-m1.zip源码

    《Spring框架1.0源码解析》 Spring框架,作为Java企业级应用开发的重要支柱,自2003年发布以来,已经历了多个版本的迭代,为开发者提供了丰富的功能和强大的支持。本文将深入探讨Spring 1.0源码,帮助读者理解其...

    官方原版源码spring-framework-5.2.3.RELEASE.zip

    《Spring Framework 5.2.3源码深度解析》 Spring Framework是Java开发中的核心框架,它为构建高质量的应用提供了全面的基础设施。5.2.3版本是Spring的一个稳定版本,包含了众多改进和新特性。这个官方原版源码包为...

    深入解析Spring IoC源码:核心机制与实践应用

    通过对Spring IoC源码的深入解析,我们可以了解到Spring如何高效地管理Bean的生命周期,以及如何通过注解实现灵活的配置。这对于开发者来说,不仅有助于提升代码质量,还能更好地利用Spring框架提供的功能,提高开发...

    Spring Ioc源码分析系列--@Autowired注解的实现原理.doc

    Spring Ioc源码分析系列--@Autowired注解的实现原理 @ Автоwired注解是 Spring Framework 中的一个重要组件,它提供了自动装配的功能,能够将 Bean 之间的依赖关系自动解析和注入。今天,我们将深入探讨 @...

    官方原版完整包 spring-framework-5.3.1.RELEASE.zip

    2. **spring-beans**: 支持Bean工厂和XML配置,是IoC容器实现的基础。 3. **spring-context**: 扩展了IoC容器,引入了上下文概念,提供了对国际化、事件、资源、缓存等支持。 4. **spring-aop**: 实现了面向切面...

    spring-framework-5.1.x-源碼解析详细注解

    《Spring Framework 5.1.x 源码解析详细注解》 Spring Framework作为Java开发中的核心框架,其设计理念和实现机制对理解企业级应用的构建至关重要。本资源提供了Spring 5.1.x版本的源码详细注解,旨在帮助开发者...

    spring-framework-5.2.0.RELEASE-master.zip

    在"spring-framework-5.2.0.RELEASE-master.zip"这个压缩包中,我们可以深入理解Spring的核心机制,通过源码注释和解析来提升对Spring的理解。 **Spring IOC(Inversion of Control)**: Spring的IOC容器是其核心...

    官方原版源码 spring-framework-5.1.15.RELEASE.zip

    Spring Core负责基础的IoC(Inversion of Control)容器,Spring Beans则实现了Bean的生命周期管理和配置,Spring Context则是基于Core之上构建的,提供了一个应用上下文,可以管理Bean并与其他Spring模块集成。...

    【框架源码篇 01】Spring源码-手写IOC

    通过分析和手写Spring的IOC源码,我们可以更好地理解Spring的工作原理,从而更有效地利用它来构建我们的应用程序。在01-手写IoC源码-spring-v1.zip文件中,你将找到逐步实现这个过程的代码示例,这将帮助你加深对...

    基于Maven构建的Spring IoC源码实例

    在"基于Maven构建的Spring IoC源码实例"中,我们可以学到如何使用Maven搭建Spring项目,并通过Spring IoC实现组件间的依赖注入。以下是这个实例中可能包含的关键知识点: 1. **Maven项目结构**:了解标准的Maven...

    spring3.2源码-官方原版.zip

    在Spring 3.2源码中,你还可以探索到IoC容器的实现,包括Bean的创建、初始化、作用域管理以及依赖解析的细节;AOP代理的生成,包括JDK动态代理和CGLIB代理的使用;还有Spring对各种协议(如JMS、JMX)的支持,以及...

Global site tag (gtag.js) - Google Analytics