一、IOC概要
IOC ,就是由 Spring IOC 容器来负责对象的生命周期和对象之间的关系.
控制反转,是一种设计思想,依赖注入DI
是一种具体实现。IOC意味着将设计好的对象交给容器控制,由容器帮我们查找及注入依赖对象(所以对象和对象之间是松散耦合的),对象只是被动的接受依赖对象,即为反转。
在传统的开发模式下,我们都是采用直接 new 一个对象的方式来创建对象,也就是说依赖的对象直接由我们自己控制,但是有了 IoC 容器后,则直接由 IoC 容器来控制。
没有 IoC 的时候我们都是在自己对象中主动去创建被依赖的对象,这是正转。但是有了 IoC 后,所依赖的对象直接由 IoC 容器创建后注入到被注入的对象中,依赖的对象由原来的主动获取变成被动接受,所以是反转。
IOC注入方式
- 构造器注入
- setter注入
- 接口注入
重要组件
主要有五个体系:Resource
、BeanFactory
、BeanDefinition
、BeanDefinitionReader
、ApplicationContext
。
Resource
对资源的抽象,它的每一个实现类都代表了一种资源的访问策略。
有了资源,就应该有资源加载,ResourceLoader
就是进行统一资源加载。
BeanFactory
是bean容器,BeanDefinition
是它的基本结构,它内部维护着一个 BeanDefinition map
,并可根据 BeanDefinition
的描述进行 bean 的创建和管理。
BeanFacoty
有三个直接子类 ListableBeanFactory
、HierarchicalBeanFactory
和 AutowireCapableBeanFactory
,DefaultListableBeanFactory
为最终默认实现,它实现了所有接口。
BeanDefinition
用来描述Spring中Bean对象。
BeanDefinitionReader
读取Spring配置文件内容,并将其转换成IOC容器内部的BeanDefinition
。
ApplicationContext
Spring容器,也叫应用上下文,继承自BeanFactory,二者主要区别:
- 继承
MessageSource
,提供国际化的标准访问策略。 - 继承
ApplicationEventPublisher
,提供强大的事件机制。 - 扩展
ResourceLoader
,可以用来加载多个 Resource,可以灵活访问不同的资源。 - 对 Web 应用的支持。