IOC的两种实现方式
- 构造方法注入
- setter注入
Ioc需要实现两个技术:
- 对象的构建
- 对象的绑定
spring提供了两种类型的容器,一个是BeanFactory,一个是ApplicationContext(可以认为是BeanFactory的扩展),下面我们将介绍这两种容器如何实现对对象的管理。
BeanFactory
如果没有特殊指定,默认采用延迟初始化策略(lazy-load)。只有当客户端对象需要访问容器中的某个受管对象的时候,才对该受管对象进行初始化以及依赖注入操作。所以,相对来说,容器启动初期速度较快,所需要的资源有限。对于资源有限,并且功能要求不是很严格的场景,BeanFactory是比较合适的 IoC容器选择。
我们先来看一下BeanFactory的关系图
有三个很重要的部分:
- BeanDefinition 实现Bean的定义(即对象的定义),且完成了对依赖的定义
- BeanDefinitionRegistry ,将定义好的bean,注册到容器中(此时会生成一个注册码)
- BeanFactory 是一个bean工厂类,从中可以取到任意定义过的bean 。
最重要的部分就是BeanDefinition,它完成了Bean的生成过程。一般情况下我们都是通过配置文件(xml,properties)的方式对be