Spring对象创建流程梳理

本文详细介绍了Spring框架中的BeanFactory工厂创建过程,包括BeanDefinitionReder解析不同源文件、BeanDefinition接口和其实现类的作用,以及BeanFactoryPostProcessor对Bean的增强和反射实例化。还涵盖了bean的初始化步骤,如属性设置、aware接口调用、AOP切面和销毁机制。
摘要由CSDN通过智能技术生成

1.首先需要先创建BeanFactory工厂(可以视作ioc容器),创建工厂时使用BeandefinitionReder读取由yml文件,xml文件,properties文件,注解定义的对象。然后通过BeanDefinitionRegistry将对象注册到beanFactory工厂的BeanDefinition集合中。

BeandefinitionReder接口:
主要由AbstractBeanDefinitionReder抽象类实现。而该抽象类又有两个主要的实现类XmlBeandefinitionReder以及PropertiesBeandefinitionReder分别解析不同的文件。

BeanDefinition接口:
实现了AttributeAccessor接口(属性访问接口)以及BeanMetaDateElement接口(资源路径)。

AbstractBeanDefinition抽象类:
实现了大部分BeanDefinition接口的方法。该抽象类主要有两个实现类GenericBeanDefinition:既可以单独作为BeanDefinition,也可以作为父BeanDefinition,还可以作为子GenericBeanDefinition。而RootBeanDefinition只能作为普通的BeanDefinition或者作为父BeanDefinition。当然最后实例化时都需merge成RootBeanDefinition。

GenericBeanDefinition类:
包含了ScannedGenericBeanDefinition:用于存放通过注解扫描出来的Bean,AnnotatedGenericBeanDefinition:用于存放配置类的Bean。两个实现类。

RootBeanDefinition类:
包含了ConfigurationClassBeanDefinition一个子类:用于存放使用@Bean声明的Bean

AnnotatedBeanDefinition接口:
该接口继承了BeanDefinition接口,作为ConfigurationClassBeanDefinition,ScannedGenericBeanDefinition,AnnotatedGenericBeanDefinition三类功能的扩充。

2.使用BeanFactoryPostProcessor对BeanFactory进行功能争强。比如修改BeanDefinition对象,增加自定义注解处理等。

3.使用反射对BeanDefinition进行实例化

4.初始化bean
①设置类属性值
②执行aware接口方法:主要用于织入容器对象(applicationcontext,beanfactory,beanname)
③调用BeanPostProcessor的befor方法:aop切面(使用动态代理实现)
④@PostConstruct、InitializingBean、initMethod按顺序进行属性装配
⑤调用BeanPostProcessor的after方法:aop切面(使用动态代理实现),在此处会生成动态代理对象

5.销毁bean

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值