Spring创建bean详解--实例化bean

如题所述

Spring框架中,创建bean是一个核心过程,下面将详细阐述其步骤。

首先,进入createBean的入口,需要参考Spring的初始化单例池的相关内容。

接下来,确认当前的bean定义已经解析了class,并复制当前的bean定义,这一步骤在AbstractAutowireCapableBeanFactory.createBean方法中执行。

在实例化bean之前,会执行实现了InstantiationAwareBeanPostProcessor接口的postProcessBeforeInstantiation方法。如果该方法返回了对象,则会跳过实例化后的方法,并设置对象已实例化,返回当前bean。

在实例化bean时,首先需要获取构造方法。这一过程包括以下步骤:从工厂bean的缓存中获取并移除缓存,如果不存在实例化bean,则进行推断构造方法。Spring使用SmartInstantiationAwareBeanPostProcessor的determineCandidateConstructors方法来推断构造方法。如果推断出有参数的构造方法,则使用有参构造方法进行初始化;否则,使用无参构造方法。

对于无参实例化,使用CglibSubclassingInstantiationStrategy的instantiate方法。该方法包括获取Class、获取默认无参构造方法和创建实例对象并返回等步骤。

在有参实例化时,基于bean工厂创建构造方法解析器,并对多个构造方法进行排序(根据参数的个数),使用第一个。接下来,获取有参构造方法的构造参数的参数数量,并判断是否使用ConstructorProperties指定参数的名字。如果没有指定,则获取参数的名字。然后,获取构造参数用于实例化bean,执行Autowired注解逻辑,并根据构造参数实例化bean并返回。

在实例化完成后,执行postProcessMergedBeanDefinition切入点,添加三级缓存,并执行实例化后的切点服务,这一步在AbstractAutowireCapableBeanFactory.populateBean方法中完成。
温馨提示:内容为网友见解,仅供参考
无其他回答

Spring创建bean详解--实例化bean
首先,进入createBean的入口,需要参考Spring的初始化单例池的相关内容。接下来,确认当前的bean定义已经解析了class,并复制当前的bean定义,这一步骤在AbstractAutowireCapableBeanFactory.createBean方法中执行。在实例化bean之前,会执行实现了InstantiationAwareBeanPostProcessor接口的postProcessBeforeInstantiation...

spring实例化bean的三种方式(springbean实例化和初始化)
spring配置bean实例化有哪些方式1、Springboot启动类:并通过@EnableConfigurationProperties指定可以使用properites来实例化bean的对象类型。2、是的,Spring管理Bean的方法就是修汽车的方式。3、如果我没记错的话,spring的单例模式容器一加载的时候就被实例化,zd比如配置struts的filter,当然在配置action的bean...

springbean初始化和实例化?
针对每次HTTP请求,Spring容器会根据Bean的定义创建一个全新的Bean实例, 且该Bean实例仅在当前HTTPrequest内有效,因此可以根据需要放心地更改所建实例的内部状态, 而其他请求中根据Bean定义创建的实例,将不会看到这些特定于某个请求的状态变化。 当处理请求结束,request作用域的Bean实例将被销毁。该作用域仅在基于web的Sp...

spring配置bean实例化有哪些方式
没有静态方法,因此配置时,先实例化工厂,在实例化需要的bean。<!-- 实例工厂获取bean,先实例化工厂再实例化bean--> <bean id="fac" class="com.persia.PersonServiceBeanInsFactory"\/> <bean id="personService3" factory-bean="fac" factory-method="createInstance"\/> 对应类 public PersonSer...

java | Spring Bean的定义(含创建Bean的三种方式)
Spring bean对象是构成应用程序的支柱,也是由Spring IoC容器管理的。bean是一个被实例化、组装,并通过Spring IoC容器所管理的对象。这些bean是由容器提供的配置元数据创建的。创建Bean的三种方式:1.基于XML配置:从Spring 2.5开始就可以使用注解来配置依赖注入,在可以使用基于注解的配置之前,需要在...

spring ioc容器之Bean实例化和依赖注入
    在这里可以看到整个bean实例化的全貌,也可以看出bean在spring中的生命周期:     可以看到在spring中是通过SimpleInstantiationStrategy类来进行bean对象的创建,有java反射和cglib两种方式进行bean的创建,判断依据是,在BeanDefinition中有动态代理...

Spring 中的 Bean
欢迎来到本篇文章,回顾 Spring 中的 Bean 基本概念、写法和实例化方式。Bean 在 Spring IoC 容器中被管理,是通过配置元数据创建的。容器中的 Bean 定义用 BeanDefinition 对象表示,包含元数据,如类名、行为配置元素等。Bean 的命名遵循驼峰命名规则,ID 是唯一标识符,可使用 name 属性或两者指定。

SpringBean的配置详解
Bean的延迟加载也值得特别关注。当lazy-init设置为true时,即为延迟加载,Spring容器在创建时不会立即创建Bean实例,而是等到真正使用时才创建并存储到单例池中,之后直接从单例池获取即可。本质上,该Bean仍然保持单例状态。在Bean的初始化和销毁方法配置方面,Bean在被实例化后,可以执行指定的初始化方法...

spring框架中实例化 bean和装配bean有什么区别?
实例化 bean就是通过spring容器生成一个bean 装配bean就是spring容器根据配置的依赖关系,自动进行依赖注入

从零开始的SSM框架学习-01-Spring中的Bean
在非Spring环境中,我们通过接口定义和实现来管理Service和DAO,然后在主函数中手动实例化。而在Spring环境下,通过pom.xml引入Spring坐标,创建applicationContext.xml配置文件,利用getBean方法从IoC容器中获取Bean。这样,业务层不再直接new对象,减少了耦合度。在DI入门案例中,我们通过Spring管理bean,Service...

相似回答
大家正在搜