![在这里插入图片描述](assets/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NvbmdoYW8wMDc=,size_16,color_FFFFFF,t_70#pic_center.png) # 第三章:Spring IoC 容器概述 Spring IoC 依赖查找: - 根据 Bean 名称查找 - 实时查找 - 延迟查找 - 根据 Bean 类型查找 - 单个 Bean 对象 - 集合 Bean 对象 - 根据 Bean 名称 + 类型查找 - 根据 Java 注解查找 - 单个 Bean 对象 - 集合 Bean 对象 Spring IoC 依赖注入: - 根据 Bean 名称注入 - 根据 Bean 类型注入 - 单个 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 * 外部化属性配置 * 基于java注解 例如@value注解 延迟查找和延迟注入,使用到接口 `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容器的简单启动流程 1. 创建beanfactory 2. 注册内建bean依赖和内建非bean依赖 3. beanfactory扩展,可以扩展或者添加自定义的bean 4. 对bean的修改或者扩展 5. 国际化准备 6. 应用事件的广播 7. 事件监听器 8. 注册应用上下文 9. 结束启动 ## ioc容器停止 1. 关闭bean 2. 销毁bean工厂 3. 子类进行下一步操作 # 面试题 1、什么是ioc容器 ![image-20220914223626948](assets/image-20220914223626948.png) 2、beanfactory和factorybean的区别? ![image-20220914224020512](assets/image-20220914224020512.png) 3、springioc容器启动时做了哪些准备? ![image-20220914224446817](assets/image-20220914224446817.png)