springIOC--bean的创建过程,生命周期的理解

 

生命周期的理解:实例化 -> 属性赋值 -> 初始化 -> 销毁

详细文章参考

spring容器启动的过程通俗理解:

加载配置文件,配置文件可以是xml,也可以是配置类;

统一先由beanDfinereader读取beandfinne,这些配置信息(bean的详情,一般是String)

然后由beanfactorypostprocsee的实现类(可以自己实现)做beandifine增强

然后通过反射创建实例

然后填充属性populatBean()

然后由beanpostprocess做bean信息增强(分前置后置)

中间执行下init-method

这些做完就放进容器里

你就可以getbean了

详细讲解

1.加载配置文件,配置文件可以是xml,也可以是配置类;

2.统一先由beanDefinereader读取到beandefiner,这些配置信息(bean的详情,一般是String),将信息解析到beandfinnition接口的实现类(类中包含bean的信息,像id,name,别名,properties属性,是否懒加载,是否是原始类型,初始化方法等)(涉及别名信息怎么处理:正常情况注册,就是向容器保存beandefine信息的map中,就是想map添加一个键值对,key是别名,value是beandefinition对象)中;

3.然后由beanfactory容器后置处理器(beanfactorypostprocessor)处理。 beanfactoryprocessor的实现类可以做很多事,因为正常的单例实例化还没有执行,可以去增加bean,修改bean,移除等等。(这是spring框架,提供的可扩展的接口,因为spring遵守面向扩展开放和面向修改关闭的规则,提供给开发者自己实现)

######################################################################

怎么提供容器后处理器?

----实现beanfactorypostprocessor接口,然后将实现类通过xml,用bean的方式写到配置文件中就可以了。后面容器启动,会读到beandefinition信息,将接口的实现类配置信息读出来,利用反射去创建实例,实现接口的方法

 bean后处理器(BeanPostProcessor)的流程?

两个的区别?

一个beanfactorypostprocessor是在单例实例化前,执行;bean后处理器是穿插在bean实例的过程中,他有两个接口方法,调用点是在init-method初始化方法执行的前后;然后bean后处理器还有一些子接口,子接口提供了一些实例化前后增强方法的入口等等。bean后处理器也是spring提供的核心扩展技术,sprig本身提供了很多bean后处理器的实现类

######################################################################

4然后通过反射创建实例

5然后填充属性populatBean()

6然后由BeanPostProcessor做bean信息增强(分前置后置)

7中间执行下init-method

8接下来会创建一个事件传播器对象,也就是spring给我们的扩展地方

#####################################################

事件传播器有什么用呢?

事件传播器会接受相应的事件,并且传播。比如说根据beandefinition创建了一个实例,保存到缓存中,会发出事件到事件传播器。事件传播器可以注册很多listener监听者。传播器把事情广播出去以后,listener就收到了事件,收到事件以后,该怎么做,就是看代码怎么写了,其实就是一个监听者模式

监听者怎么给到传播器?即怎么监听事件?

只要实现了监听接口,并且配置成bean就可以了。spring容器启动以后,会根据类型获取beandefiner信息,并且实例化以后注册到事件传播器上。

传播器是怎么运行的

#####################################################

9这些做完就放进容器里,你就可以getbean了

 #####################################################

正常的单例的实例化过程。

加载配置信息==》beandefeinitionread 读取beandefeinitioner信息,放到容器的map中==》bd的实现类和parent信息加载到mbd(mergebeandefeiner)中==》mbd是否配置有depend-on信息,如果有,先实例化depend-on指定的bean==》再往下走,根据bean指定的class信息还有构造方法信息,去寻找合适的构造方法,这个查找过程非常复杂,总之到最后拿到合适的构造方法,通过反射实例化对象==》还有很多对应的逻辑进行处理,属性填充,依赖注入,init-method方法调用

#####################################################

问题:循环依赖问题的解决

真正源码上去看待ioc,了解每个过程的源码执行

关于接口直接的关系

参考视频,只讲解了大概步骤,不涉及具体方法内容

 参考视频,讲的流程比较规范

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值