Spring源码笔记之SpringIOC--(2)从BeanDefinition到Bean实例

这篇具有很好参考价值的文章主要介绍了Spring源码笔记之SpringIOC--(2)从BeanDefinition到Bean实例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

从BeanDefinition到Bean实例

对比SimpleBeanDefinitionRegistryDefaultListableBeanFactory的源码,中间省略一些无关紧要的逻辑:

SimpleBeanDefinitionRegistry.java

public class SimpleBeanDefinitionRegistry extends SimpleAliasRegistry implements BeanDefinitionRegistry {

	/** Map of bean definition objects, keyed by bean name. */
	private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(64);
    
    @Override
	public void registerBeanDefinition(String beanName, BeanDefinition beanDefinition)
			throws BeanDefinitionStoreException {
		this.beanDefinitionMap.put(beanName, beanDefinition);
    }
    
	@Override
	public BeanDefinition getBeanDefinition(String beanName) throws NoSuchBeanDefinitionException {
		BeanDefinition bd = this.beanDefinitionMap.get(beanName);
		if (bd == null) {
			throw new NoSuchBeanDefinitionException(beanName);
		}
		return bd;
	}
}

DefaultListableBeanFactory.java

public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFactory
		implements ConfigurableListableBeanFactory, BeanDefinitionRegistry, Serializable {
	/** Map of bean definition objects, keyed by bean name. */
	private final Map<String, BeanDefinition> beanDefinitionMap = new ConcurrentHashMap<>(256);
    @Override
	public void registerBeanDefinition(String beanName, BeanDefinition beanDefinition)
			throws BeanDefinitionStoreException {
        // 实现比较复杂暂时省略
    }
    
	@Override
	public BeanDefinition getBeanDefinition(String beanName) throws NoSuchBeanDefinitionException {
        // 实现比较复杂暂时省略
	}
    
    @Override
    public Object getBean(String name) throws BeansException {
		assertBeanFactoryActive();
		return getBeanFactory().getBean(name);
	}
    
    @Override
	public <T> T getBean(Class<T> requiredType) throws BeansException {
		return getBean(requiredType, (Object[]) null);
	}
}

从类关系上来看DefaultListableBeanFactory不单单实现了BeanDefinitionRegistry,还实现了BeanFactory(继承了AbstractAutowireCapableBeanFactory)提供了获取bean实例的方法。分析其继承关系如下:

其中BeanFactory是IOC容器的核心文章来源地址https://www.toymoban.com/news/detail-827030.html

到了这里,关于Spring源码笔记之SpringIOC--(2)从BeanDefinition到Bean实例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【框架源码】Spring源码解析之BeanDefinition加载流程解析

    观看本文之前,我们先思考一个问题,Spring是如何描述Bean对象的? Spring是根据BeanDefinition来创建Bean对象,BeanDefinition就是Spring中表示Bean定义。BeanDefinition用来存储Bean的相关信息,主要包括:Bean的属性、是否单例、延迟加载、Bean的名称、构造方法等。 简言之就是Spring通过解

    2024年02月09日
    浏览(29)
  • Spring高手之路16——解析XML配置映射为BeanDefinition的源码

       Spring 框架中控制反转( IOC )容器的 BeanDefinition 阶段的具体步骤,主要涉及到 Bean 的定义、加载、解析,并在后面进行编程式注入和后置处理。这个阶段是 Spring 框架中 Bean 生命周期的早期阶段之一,对于理解整个 Spring 框架非常关键。 加载配置文件、配置类   在这

    2024年02月04日
    浏览(36)
  • 【Spring】Bean的实例化

            在容器中的Bean要实例化为对象有三种方式         1、构造方法         2、静态工厂         3、实例工厂         4、实现工厂接口         构造方法实例化Bean即是直接通过构造方法创建对象         当不存在无参构造是会抛出异常         静态工厂类实现  

    2024年02月12日
    浏览(28)
  • Spring Bean的实例化过程

    一、前言 对于写Java的程序员来说,Spring已经成为了目前最流行的第三方开源框架之一,在我们充分享受Spring IOC容器带来的红利的同时,我们也应该考虑一下Spring这个大工厂是如何将一个个的Bean生产出来的,本期我们就一起来讨论一下Spring中Bean的实例化过程。 1.1 Spring Bean

    2024年02月10日
    浏览(28)
  • spring实例化bean之循环依赖

    serviceA里注入了serviceB,serviceB里又注入了serviceA,这样在实例化serviceA时,在doCreateBean时的populateBean时会先实例化serviceB,然后实例化serviceB,在serviceB的doCreateBean方法的populateBean又会去找servcieA,这样循环依赖就产生了。 解决办法就是在populateBean之前把当前的serviceA提前暴露,然

    2024年02月08日
    浏览(26)
  • spring中bean实例化的三种方式 -- Spring入门(二)

    为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。 (博客的参考源码以及可以在我主页的资源里找到,如果在学

    2024年02月16日
    浏览(24)
  • spring启动流程 (2) Bean实例化流程

    本文通过阅读Spring源码,分析Bean实例化流程。 上一篇文章已经介绍,Bean实例化入口在AbstractApplicationContext类的finishBeanFactoryInitialization方法: 返回指定beanName的(原始)单例对象,如果没有则创建一个新对象: 创建Bean实例、填充属性、调用后置处理器等:

    2024年02月11日
    浏览(67)
  • Spring中Bean的实例化详细流程

    还是举个例子,我有一个朋友小汪他远赴南方某城市打工。然后安定下来后他的朋友很想来家里玩,但是呢我这个朋友家里搞的很乱,所以他不好意思请朋友来家里玩。这时我的另一个朋友说那请一个保姆把家里好好整理一下就可以了,然后给他介绍了一个保姆大S(PS:本文无

    2023年04月12日
    浏览(42)
  • 【Spring】使用@Bean和@Import注解配置Bean,与Bean的实例化

    目录 1、bean是什么 2、配置bean 2.1、使用@Bean注解配置Bean 2.2、使用@Import注解配置Bean  3、实例化Bean         在 Spring 中,Bean 是指由 Spring 容器管理的对象。Spring IOC 容器负责创建、配置和管理这些 Bean 对象的生命周期。Spring IOC 容器会管理应用程序中的组件,并通过依赖注

    2024年04月15日
    浏览(21)
  • 【Spring(四)】万字详解bean的实例化

      在上篇文章,我们已经完成了 入门案例 的学习,在入门案例中,我们讲了三块东西,首先是 bean怎么定义配置,DI怎么去制作配置以及我们的容器对象如何去获取 在接下来的内容中,我们将针对以上三块东西展开学习✍️✍️。 在学习bean的实例化之前,我们先来学习 b

    2024年02月21日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包