首页 > 编程语言 >Spring容器创建Bean源码分析

Spring容器创建Bean源码分析

时间:2022-08-21 15:58:12浏览次数:66  
标签:Spring getBean Bean 源码 GenericApplicationContext 方法 getBeanFactory

一、Spring提供了多种上下文来实现容器功能

  比如:AnnotationConfigApplicationContext、ClassPathXmlApplicationContext

  这里使用AnnotationConfigApplicationContext分析,代码如下:

  

二、Spring在调用getBean方法时创建Bean

  追踪context.getBean方法,发现通过BeanFactory调用getBean

  

  点进去this.getBeanFactory(),跳到了AbstractApplicationContext的getBeanFactory方法,该类是抽象类,有两个具体实现:

  1)AbstractRefreshableApplicationContext中实现

  2)GenericApplicationContext中实现

  我们再看上下文AnnotationConfigApplicationContext继承了GenericApplicationContext

  

  所以会进入GenericApplicationContext中的getBeanFactory,其类型是DefaultListableBeanFactory,它的getBean方法如下

  

  继续追踪resolveBean方法,发现执行完resolveNamedBean,Bean已经创建好了,核心方法就是resolveNamedBean,继续

  

  resolveNamedBean方法中先得到Bean的名称数组candidateNames,我们只有一个MyBean.class,所以length为1

  

  如下,进入this.getBean,调用doGetBean,该方法会调用多次,当beanName为myBean即是我们需要的Bean

  

三、 分析doGetBean方法

   先看一下为什么该方法会多次执行

 

标签:Spring,getBean,Bean,源码,GenericApplicationContext,方法,getBeanFactory
From: https://www.cnblogs.com/javasl/p/16610109.html

相关文章

  • 1.spring boot面试题
    SpringBoot基础1.什么是springboot?通过自动配置方式简化Spring应用的开发,弱化配置,遵循约定大于配置的原则,使开发者专注于业务开发而无需过多考虑配置相关操作,通过启动......
  • spring 整合 rabbitmq
    一、基本配置1、pom添加以下jar<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.7.5</ve......
  • SpringBean的实例化
    在Spring框架中,想使用Spring容器中的Bean,需要先实例化BeanSpringBean的实例化有3种方式构造方法实例化(最常用)在Java配置类中,写一个构造方法,在这个构造方法中new一个......
  • 【博学谷学习记录】超强总结,用心分享。 Spring核心容器
    SpringFramework系统架构一.核心容器1.概念:代码书写现状:耦合度偏高解决方法:使用对象时,在程序中不要主动使用n......
  • Spring 05: 用DI(依赖注入)优化Spring接管下的三层项目架构
    背景用注解改造前面Spring博客集里(指Spring02)Spring接管下的三层项目架构对前面Spring博客集里(指Spring04)@Controller+@Service+@Repository3个注解的用法......
  • spring5 事务
    1.事务介绍1.1事务添加到javaEE的service1.2声明式事务和编程试1.3声明式xml事务开发注解方式1.4在Spring中进行事务开发底层用的aop原理1.5Spring事......
  • SpringBoot的基本概念(1)
     1.为什么使用springboot springboot容易上手,做了jar包的版本控制,不用考虑maven依赖,方便敏捷开发,内置tomcat减少开发配置,由于SPI提供对外的starter扩展。 2.spr......
  • Mybatis源码4 Cache的实现和其原理
    Mybatis源码4Cache的实现和其原理一丶Cache的实现类TransactionalCache事务缓存,一次性存入多个缓存,移除多个缓存PerpetualCache基于HashMap的缓存实现LoggingCach......
  • Mybatis源码5 StatementHandler ,ParameterHandler
    Mybatis源码5StatementHandler,ParameterHandler一丶概述前面我们总结了SqlSession--->CachingExecutor--->BaseExector---->Excutor子类doQuery,doUpdate的执行流程,my......
  • Mybatis 源码6 结果集映射流程 ,mybatis插件实现原理和基于mybatis插件实现参数化类型T
    Mybatis源码6结果集映射流程,mybatis插件实现原理和基于mybatis插件实现参数化类型TypeHandler一丶前情回顾书接上回,下面是SimpleExecutor执行查询的主要逻辑prepa......