首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java学习笔记-spring-Bean实例化

零、bean 实例化方式 构造器实例化 (常用) 静态工厂实例化 实例工厂实例化 一、构造器实例化 Spring 容器通过Bean 对应类中默认无参构造方法来实例化Bean。...ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath); //实例化...} } 二、静态工厂实例化 创建一个静态工厂类来创建Bean的实例,Bean配置中的class属性所指定的不再是Bean实例实现的类,而是静态工厂类,同时还需要使用 factory-method...")); } } 三、实例化工厂实例化 配置文件中需要实例化的Bean通过 factory-bean 属性指向配置的实例工厂,然后使用 factory-method 确定使用的是工厂中的哪个方法...工厂实例化中"); } public Bean3 createBean() { return new Bean3(); } } <!

52810

Spring系列三之Bean实例化流程

1 Bean实例化紧接着上文,Spring的Bean实例化发生在刷新IOC容器阶段的倒数第二步finishBeanFactoryInitialization(beanFactory),最终在该方法中调用...DefaultListable.preInstantiateSingletons()方法实例化所有非懒加载的Bean实例,代码如下public void preInstantiateSingletons...,如果有依赖,则先实例化DependsOn的Bean,如果没有就开始第三步创建Bean第三步:创建Bean,调用了getSingleton(String beanName, ObjectFactory实例化bean,这一步没啥好说的,主要就是创建一个Bean实例2.如果允许循环依赖并且是在创建中的状态...个人理解:二级缓存也能解决问题,但是要使用二级缓存解决循环依赖,意味着所有Bean在实例化后就要完成AOP代理(因为在Spring中如果有AOP,注入的都是代理对象)这样违背了Spring设计的原则,Spring

15510
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Spring Ioc源码分析 之 Bean的加载(五):实例化Bean

    上篇文章Spring Ioc源码分析 之 Bean的加载(四):createBean()中我们分析了doCreateBean()方法的大致流程,这篇文章我们就详细分析下实例化 bean的createBeanInstance...//使用默认的无参构造方法实例化 return instantiateBean(beanName, mbd); } 复制代码 这段代码中,Spring把Bean的实例话分为了4种方式: Supplier...1.3.1.12、实例化Bean对象 strategy.instantiate 这部分代码还是挺多的,我们放在下一章分析。...总结 对于 createBeanInstance() 方法而言,他就是选择合适实例化策略来为 bean 创建实例对象,具体的策略有: Supplier 回调方式 工厂方法初始化 构造函数自动注入初始化...其中,工厂方法初始化和构造函数自动注入初始化两种方式最为复杂,主要是因为构造函数和构造参数的不确定性,Spring 需要花大量的精力来确定构造函数和构造参数,如果确定了则好办,直接选择实例化策略即可。

    1.5K51

    【08】Spring源码-分析篇-Bean的实例化

    Spring源码-Bean的实例化   接下来我们看看Bean的实例化处理 一、BeanDefinition   首先我们来看看BeanDefinition的存放位置。...因为Bean对象的实例化肯定是BeanFactory基于对应的BeanDefinition的定义来实现的,所以在这个过程中BeanDefinition是非常重要的,前面的课程讲解已经完成了BeanDefinition...beanDefinitionMap = new ConcurrentHashMap(256); 二、Bean实例的创建过程   然后就是Bean实例的创建过程。...在 addSingleton 方法中 所以singletonObjects是缓存所有Bean实例的容器 而具体创建单例Bean的逻辑会回调前面的Lambda表达式中的createBean方法...实例化的过程了,当然在实例化中的DI问题我们在下篇文章中重点分析。

    43910

    【死磕 Spring】—– IOC 之 Factory 实例化 bean

    原文出自:http://cmsblogs.com 这篇我们关注创建 bean 过程中的第一个步骤:实例化 bean,对应的方法为: createBeanInstance(),如下: protected...bean 是一个复杂的过程,其主要的逻辑为: 如果存在 Supplier 回调,则调用 obtainFromSupplier() 进行初始化 如果存在工厂方法,则使用工厂方法进行初始化 首先判断缓存,...实例对象,然后根据该实例对象构造一个 BeanWrapper 对象 bw,最后初始化该对象。...ConstructorResolver 是构造方法或者工厂类初始化 bean 的委托类。...创建 bean 实例 工厂对象、构造函数、构造参数都已经确认了,则最后一步就是调用 InstantiationStrategy 对象的 instantiate() 来创建 bean 实例,如下: public

    87461

    【死磕 Spring】—– IOC 之构造函数实例化 bean

    原文出自:http://cmsblogs.com createBeanInstance() 用于实例化 bean,它会根据不同情况选择不同的实例化策略来完成 bean 的初始化,主要包括: Supplier...默认构造函数注入: instantiateBean() 在上篇博客(【死磕 Spring】----- IOC 之 Factory 实例化 bean) 中分析了 Supplier 回调和工厂方法初始化,...Factory 实例化 bean,这里我们重点分析初始化策略。...对于 createBeanInstance() 而言,他就是选择合适实例化策略来为 bean 创建实例对象,具体的策略有:Supplier 回调方式、工厂方法初始化、构造函数自动注入初始化、默认构造函数注入...其中工厂方法初始化和构造函数自动注入初始化两种方式最为复杂,主要是因为构造函数和构造参数的不确定性,Spring 需要花大量的精力来确定构造函数和构造参数,如果确定了则好办,直接选择实例化策略即可。

    1K51

    Spring Bean 实例的注册流程

    关于Spring Bean 实例的注册流程: 1.定义好Spring的配置文件。...2.通过Resource对象将Spring配置文件进行抽象,抽象成一个具体的Resource对象(如ClassPathResource) 3.定义好要使用Bean工程(各种BeanFactory)....标签都解析完毕后,开始定义一个BeanDefinition对象,该对象是一个非常重要的对象,里面容纳了一个bean相关的所有属性 10.BeanDefinition对象创建完毕之后,Spring又会创建一个...11.BeanDefinitionHolder对象主要包含:beanName 和BeanDefinition. 12.工厂会把解析出来的bean信息存放到内部的一个ConcurrentHashMap中...,key:beanName(唯一),value:BeanDefinition对象创建完毕之后,Spring又会创建一个BeanDefinition对象 13.调用Bean解析完毕的触发动作,从而触发相应的监听器的方法的执行

    49020

    spring(5) - Bean实例化中,对循环依赖的处理

    背景知识 (1) spring(3) - springboot启动过程 (2) spring(4) - spring Bean创建并注册到容器 2....Bean创建 通过 背景知识,我们知道,spring在创建Bean的时候,分三步,先创建bean,然后注册到容器中,之后进行属性装配,在进行初始化 2.1 AbstractAutowireCapableBeanFactory...3 应用三层缓存对循环依赖的处理举例 如果 A,B 两个类互相依赖,且需要实例化,当只有一层缓存 singletonObjects 的时候,A 实例化调用B,B实例化调用A,就无法结束了; 此时加一层缓存...singletonFactories中找到其工厂,直接创建B 的未初始化实例放到二级缓存中,并将三级缓存中的B工厂清除,然后返回继续实例化A,因为从二级缓存中找到了B的未初始化引用,得以继续完成实例化A...,当需要继续初始化B时,再将A的完整实例引用从一级缓存给到B实例,这样就完成了循环依赖的实例化; 根本原理是 从JVM层面,将实例化分成了 声明, 初始化 两个阶段,(也就是分层的思想),在一层无法解决的时候

    71320

    【死磕 Spring】—– IOC 之开启 bean 的实例化进程

    其含义是根据给定的 BeanDefinition 和 args实例化一个 bean 对象,如果该 BeanDefinition 存在父类,则该 BeanDefinition 已经合并了父类的属性。...中的 methodOverrides 属性中,我们知道在 bean 实例化的过程中如果检测到存在 methodOverrides,则会动态地位为当前 bean 生成代理并使用对应的拦截器为 bean...实例化的前置处理 resolveBeforeInstantiation() 的作用是给 BeanPostProcessors 后置处理器返回一个代理对象的机会,其实在调用该方法之前 Spring 一直都没有创建...() 两个方法,before 为实例化前的后处理器应用,after 为实例化后的后处理器应用,由于本文的主题是创建 bean,关于 Bean 的增强处理后续 LZ 会单独出博文来做详细说明。...将所有属性填充至 bean 的实例中 调用 initializeBean() 初始化 bean 依赖检查 注册 DisposableBean doCreateBean() 完成 bean 的创建和初始化工作

    84930

    【死磕 Spring】----- IOC 之 bean 的实例化策略:InstantiationStrategy

    在开始分析 InstantiationStrategy 之前,我们先来简单回顾下 bean 的实例化过程: bean 的创建,主要是 AbstractAutowireCapableBeanFactory.doCreateBean...() ,在这个方法中有 bean 的实例化、属性注入和初始化过程,对于 bean 的实例化过程这是根据 bean 的类型来判断的,如果是单例模式,则直接从 factoryBeanInstanceCache...如果 factory 不为空,则调用 instantiateUsingFactoryMethod() 实例化 bean ,如果都不是则调用 instantiateBean() 实例化bean 。...InstantiationStrategy InstantiationStrategy 接口定义了 Spring Bean 实例化的策略,根据创建对象情况的不同,提供了三种策略:无参构造方法、有参构造方法...CGLIB 实例化策略 类 CglibSubclassingInstantiationStrategy 为 Spring 实例化 bean 的默认实例化策略,其主要功能还是对父类功能进行补充:其父类将

    1.4K30

    这一次搞懂Spring的Bean实例化原理

    我们可以通过实现这两个接口在在BeanDefinition注册完成后,对象实例化之前对容器中的BeanDefinition进行动态的增删查改,比如Spring中@Configuration注解的解析就是在这个过程中实现的...可以看到这个接口Spring内置的实现就比较多,可见用途之广泛。另外上面画红框的是本次需要重点记忆的类,后面Bean实例化时会出现。...(ppName, PriorityOrdered.class)) { //getBean是实例化方法,后面我们在讲bean实例化过程是会着重讲到 BeanPostProcessor pp...//寻找当前正在实例化的bean中有@Autowired注解的构造函数 ConstructorBean的整个实例化过程分析完成,看到这里,你应该对于Bean的生命周期函数有个基本的认识了,最后放上我画的Bean实例化流程时序图: ?

    87350

    Spring-Bean实例是如何依赖注入?

    给Bean配置了懒加载,ApplicationContext启动完成后调用getBean()来实例化对象。...BeanFactory 通过Spring获取Bean的最根本的接口。 ? // 如果myJndiObject时FactoryBean, 则 &myJndiObject 将返回工厂而不是返回实例。...调用 populateBean()方法给bean的属性值赋值,然后初始化bean对象并返回创建的bean实例,如果抛异常,则下一步。...我们首次获取bean实例的时候,bean工厂是肯定没有的,所以我们首次获取到的BeanWrapper应该是空对象,但是它调用了 createBeanInstance()方法后,可以看到spring是很确定它能拿到对象...好了,到了这里,Spring就完成了bean实例的创建,但是此时就能拿着这个实例去使用吗,显然是不可以,因为属性还没有被赋入,下一章再继续介绍如何将属性依赖关系注入到Bean实例对象。

    1.1K30

    初始化Spring Bean:Bean初始化有哪些方式?

    对于Spring Bean 的初始化归纳了下,主要可以归纳一下三种方式 @PostConstruct 标注方法 自定义初始化方法 实现 initializingBean 接口的afterPropertiesSet...应用上下文 applicationContext.refresh(); // 非延迟初始化在 Spring 应用上下文启动完成后,被初始化 System.out.println......"); // 关闭 Spring 应用上下文 applicationContext.close(); System.out.println("Spring...二、自定义初始化方法 自定义初始化方法大致可分为三种实现 XML 配置:bean init-method=”init” ... /> Java 注解:@Bean(initMethod=”init”)...归纳 上面三种方式案例分别介绍了PostConstruct、initializingBean以及自定义Bean初始化的方法;从执行结果可以看出,他们的执行顺序是有一定的要求的。

    5.7K21
    领券