spring IOC容器的初始化和依赖注入

来源:互联网 发布:icloud删除的数据恢复 编辑:程序博客网 时间:2024/06/06 02:28

Spring两大IOC容器:BeanFactory 与 ApplicationContext(应用上下文)

两者区别
1.两者都是通过xml配置文件加载bean;
2.BeanFactory 采用了工厂模式,ApplicationContext是基于BeanFactory 之上,但是提供了更多功能,如国际化(I18N)支持、从属性文件读取文本信息、向注册为监听器的Bean发送事件等;
3.BeanFactory 延迟加载所有Bean,只有当你使用到的时候才对Bean实例化;
4. ApplicationContext 默认加载所有Bean(单例),所以,在内存占用上后者比前者大

IOC容器的初始化与依赖注入(流程图)
初始化


依赖注入


控制反转(IOC)、依赖注入(DI)

控制反转:利用反射技术(Class加载器加载对象,有三种方式),将对象创建权利转移给容器(Spring容器负责利用反射创建对象,然后实例化),一般结合配置文件,读取根据配置文件创建对象。

依赖注入:在spring容器中已经加载好实例了,所以在一个对象中想进行实例加载的时候,不需要通过new实例化一个对象,Spring IOC容器会主动的将你配置好的类进行注入(构造器注入、setter注入)该对象实例(注解)

关系图(图为个人理解)
IOC,DI

最后补充一下:Bean在Spring容器中的生命周期(涉及到Spring容器的底层代码,这里只列出大概流程走向)

实例化——>设置属性——>设置Bean名称——>预处理(在初始化之前)——>初始化Bean——>预处理(在初始化之后)——>Bean已经准备好——>销毁

对应上:
Spring实例化Bean——>Spring注入Bean属性——>调用BeanNameAware的SetBeanName()方法——>调用BeanPostProcessor的预初始方法——>调用InitializingBean的AfterPropertiesSet()方法——>调用BeanPostProcessor的后初始化方法——>Bean可以使用——>(容器关闭)调用DisposableBean的destroy()方法

附上相关博文:
IOC与DI的理解:http://blog.csdn.net/bestone0213/article/details/47424255

spring IOC整体流程:http://blog.csdn.net/zly9923218/article/details/51299515

今天的博文就写到这,学无止境,生生不息。

0 0