Spring源码解析之xml方式进行IOC

一、反射机制

创建对象的两种方式:new 和反射

1、获取Class的三种方式
Class clazz = Class.forName();
Class clazz = 类名.class;
Class clazz = 对象名.getClass();

2、生成具体的对象
Constructor ctor = clazz.getDeclareConstructor();
Object obj = ctor.newInstance();

使用场景:比如JDBC原生代码注册驱动,hibernate 的实体类,Spring 的 AOP等等都有反射的实现。但是反射也会消耗系统的性能,增加复杂性。

二、Spring 的使用步骤:

创建配置文件==>加载==>解析==>创建实例==>使用==>销毁
容器==>存放==>bean==>数据结构==>Map

Spring 中 Bean的默认 scope 地单例的

1、生成对象的两种方法:xml配置文件 和 注解(定义Bean的定义信息),之后将BeanDefinition(bean定义信息)放到IOC Container当中。但是,xml中的信息必须要进行抽奖层定义规范进行解析(读取BeanDefinitionReader)才能被Container识别。在Container中获取到的BeanDefinition通过BeanFactoryPostProcessor进行转换属性值(修改xml配置文件中的信息)。
在这里插入图片描述

如下代码:


是将root赋值给username,而赋值的过程就通过BeanFactoryPostProcessor实现
在这里插入图片描述

如果需要自定义修改文件的信息只需要实现BeanFactoryPostProcessor即可。
在这里插入图片描述

通过ConfigurableListableBeanFactory对象获取BeanDefinition
2、BeanFactory通过反射实例化对象
Bean的生命周期在单例模式下就是在初始化的时候创建的。
在这里插入图片描述
a、通过反射完成实例化、
b、填充属性(populateBean)、
c、执行Aware接口需要实现的方法、【Aware接口的意义:方便通过spring中的Bean对象来获取对应容器中的相关属性值】
d、BeanPostProcessor:before
e、init-method初始化方法
f、BeanPostProcessor:after
g、完整对象
h、销毁流程

如果需要在spring生命周期的不同阶段左不同的处理工作,可以使用观察者模式:监听器、监听事件
在这里插入图片描述
super():定义一些属性;
SetConfigLocations():定义配置文件的位置(applicationContext.xml)
refresh():加载所有 bean 定义并创建所有单例

prepareRefresh():准备工作方便后面能存储工作

1、先创建容器。如果存在工厂销毁;createBeanFactory()创建工厂;setSerializationId()为序列化指定ID;定制工厂,设置相关的值;
在这里插入图片描述

2、loadBeanDefinitions()加载配置文件。由于未读取到配置文件,所以beanDefinitionMap的值未0
在这里插入图片描述

当将xml配置文件转换成IOC Container可以识别的信息,就将信息存储到Map中
在这里插入图片描述
3、初始化BeanFactory
在这里插入图片描述
在这里插入图片描述

4、调用BeanFactoryPostProcessor
在这里插入图片描述

5、之后进行实例化,但是在实例化的时候需要使用到BeanPostProcessor,所以需要准备BeanPostProcessor和监听器。
在这里插入图片描述

6、initMessageSource()国际化处理
7、准备监听器,初始化 多波器
在这里插入图片描述

8、注册监听器registerListeners()
在这里插入图片描述

9、接下来需要实例化。实例化所有剩下的非懒加载单利对象
在这里插入图片描述

判断容器里面有没有Bean,没有则继续doGetBean()
在这里插入图片描述

真正干活的方法是doGetBean
在这里插入图片描述

10、创建Bean的实例
在这里插入图片描述

11、populateBean填充属性值
在这里插入图片描述

12、执行Aware接口需要实现的方法
在这里插入图片描述
在这里插入图片描述

13、执行before方法
在这里插入图片描述

14、初始化之后调用after方法
在这里插入图片描述

15、对象创建成功

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值