概述
在bean构建的过程中,getBean方法内部的具体逻辑可以参考之前的文章
Spring如何解决循环依赖
具体bean的生命周期
(1)实例化Bean:如果要使用一个bean的话
(2)设置对象属性(依赖注入):他需要去看看,你的这个bean依赖了谁,把你依赖的bean也创建出来,给你进行一个注入,比如说通过构造函数,setter
(3)处理Aware接口:
如果这个Bean已经实现了ApplicationContextAware接口,spring容器就会调用我们的bean的setApplicationContext(ApplicationContext)方法,传入Spring上下文,把spring容器给传递给这个bean
(4)BeanPostProcessor:
如果我们想在bean实例构建好了之后,此时在这个时间带你,我们想要对Bean进行一些自定义的处理,那么可以让Bean实现了BeanPostProcessor接口,那将会调用postProcessBeforeInitialization(Object obj, String s)方法。
(5)InitializingBean 与 init-method:
如果Bean在Spring配置文件中配置了 init-method 属性,则会自动调用其配置的初始化方法。
(6)如果这个Bean实现了BeanPostProcessor接口,将会调用postProcessAfterInitialization(Object obj, String s)方法
(7)FactoryBean:如果bean实现了FactoryBean接口,那么最终返回的bean是getObject中的返回值 这一步在初始化bean的时候并没有执行,而是在第二次getBean的时候才会被执行
(8)DisposableBean:
当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean这个接口,会调用其实现的destroy()方法;
(9)destroy-method:
最后,如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法。
什么时候开始bean的生命周期呢?
这里我们定义是普通的Spring bean,即只注解了一个@Service/@Component的
我们将断点打在一个普通Spring bean上
查看断点信息:
重点关注红框方法
可以看到,遍历了最开始注册的bd信息来加载bean
最后
以上就是外向奇迹为你收集整理的Spring-bean加载流程及bean的生命周期的全部内容,希望文章能够帮你解决Spring-bean加载流程及bean的生命周期所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复