简介
将原本由程序员控制的对象交由Spring IoC容器控制。
在不使用IOC模式的时候,程序员需要手动创建对象并且手动去配置对象的属性。
使用了IOC模式,IOC容器就会负责创建和配置对象,并且IOC容器会把这些对象自动注入到依赖它的地方
使用
以平常开发最常见的场景举个例子
创建
先讲创建,controller层对象依赖service层对象,这时候这需要在两个对象上加上对应的注解,标识这些对象需要交给Spring的IOC容器管理,然后IOC容器就会自动创建这几个对象
注入
再讲注入,因为controller层对象需要使用到service层对象,这时候只需要在controller对象里定义一个service对象的引用,然后加上@Autowired注解,IOC容器就会自动将创建好的service对象赋值给这个引用
原理
最后讲一下Spring IOC的原理,Spring的IOC容器其实就是ApplicationContext接口的一个实现,这个接口它继承自BeanFactory,然后这个接口的两个常用实现包括ClassPathXmlApplicationContext,和AnnotationApplicationContext,它们分别根据xml配置文件和注解去构造IOC容器,也就是BeanFactory。
接下来我简单讲一下ApplicationContext的构造过程中比较重要的两个步骤
第一步,创建BeanFactory,并且加载注册bean
先说BeanFactory的创建,Spring会创建一个BeanFactory类型的对象,然后赋值给ApplicationContext内部的一个BeanFactory类型的引用。前面有讲到ApplicationContext继承了BeanFactory,但是根据这一步操作就可以推断,其实ApplicationContext里对BeanFactory接口的实现其实是通过内部的一个Beanfactory类型的实例;然后再讲一下bean的加载和注册,Spring会将xml里的bean配置转换成BeanDefinition存储在BeanFactory里,然后BeanDefinition 中保存了Bean 信息,比如这个 Bean 是哪个类、是否是单例的、是否懒加载、这个 Bean 依赖了哪些 Bean 等等。
第二步,就是Bean的初始化。
通过第一步生成的BeanDefinition去构造bean对象
大概这些