第三章:Spring IoC 容器概述
Spring IoC 依赖查找:
- 根据 Bean 名称查找
- 根据 Bean 类型查找
- 根据 Bean 名称 + 类型查找
- 根据 Java 注解查找
Spring IoC 依赖注入:
- 根据 Bean 名称注入
- 根据 Bean 类型注入
- 注入容器內建 Bean 对象 -- 例如Environment内建bean,在初始化容器的时候就被自动注入了
- 注入非 Bean 对象 -- 例如beanfactory,不能进行依赖查找。会报错error
- 注入类型
spring ioc 依赖来源:
- 自定义bean
- 容器内建bean对象
- 容器内建依赖
spring ioc 配置元信息:
- bean定义配置
- 基于xml文件
- 基于properties文件
- 基于java注解
- 基于java api
- ioc容器配置
- 基于xml文件
- 基于java注解
- 基于java api
- 外部化属性配置
延迟查找和延迟注入,使用到接口 org.springframework.beans.factory.ObjectProvider
和 org.springframework.beans.factory.ObjectFactory
,ObjectProvider
继承 ObjectFactory
BeanFactory
和 ApplicationContext
谁才是 Spring IoC 容器?
BeanFactory
是 Spring 底层 IoC 容器
ApplicationContext
是具备应用特性的 BeanFactory
超集
BeanFactory
是基本的 IoC 容器,ApplicationContext
实现 BeanFactory
接口,并在内部使用 ConfigurableListableBeanFactory
实现接口方法。
ApplicationContext 除了 IoC 容器角色,还有提供:
- 面向切面(AOP)
- 配置元信息(Configuration Metadata)
- 资源管理(Resources)
- 事件(Events)
- 国际化(i18n)
- 注解(Annotations)
- Environment 抽象(Environment Abstraction)
ioc容器的简单启动流程
- 创建beanfactory
- 注册内建bean依赖和内建非bean依赖
- beanfactory扩展,可以扩展或者添加自定义的bean
- 对bean的修改或者扩展
- 国际化准备
- 应用事件的广播
- 事件监听器
- 注册应用上下文
- 结束启动
ioc容器停止
- 关闭bean
- 销毁bean工厂
- 子类进行下一步操作
面试题
1、什么是ioc容器
2、beanfactory和factorybean的区别?
3、springioc容器启动时做了哪些准备?