在 Spring IOC 容器讀取 Bean 配置創建 Bean 實例之前, 必須對它進行實例化. 只有在容器實例化後, 纔可以從 IOC 容器裏獲取 Bean 實例並使用.
一、Spring 提供了兩種類型的 IOC 容器實現.
-BeanFactory: IOC 容器的基本實現.
-ApplicationContext: 提供了更多的高級特性. 是 BeanFactory 的子接口
-BeanFactory 是 Spring 框架的基礎設施,面向 Spring 本身;ApplicationContext 面向使用 Spring 框架的開發者,幾乎所有的應用場合都直接使用 ApplicationContext 而非底層的 BeanFactory
-無論使用何種方式, 配置文件時相同的.
二、ApplicationContext代表容器
ApplicationContext 的主要實現類:ClassPathXmlApplicationContext:從 類路徑下加載配置文件
FileSystemXmlApplicationContext: 從文件系統中加載配置文件
ConfigurableApplicationContext 擴展於 ApplicationContext,新增加兩個主要方法:refresh() 和 close(), 讓 ApplicationContext 具有啓動、刷新和關閉上下文的能力
ApplicationContext 在初始化上下文時就實例化所有單例的 Bean。
WebApplicationContext 是專門爲 WEB 應用而準備的,它允許從相對於 WEB 根目錄的路徑中完成初始化工作
三、從 IOC 容器中獲取 Bean的方法
註釋:如果是通過id來注入的話,需要傳入bean的id,如果傳入的是類型,就要求容器中只能有一個該類型的bean
四、依賴注入的方式
Spring 支持 3 種依賴注入的方式
屬性注入
構造器注入
工廠方法注入(很少使用,不推薦)
1、屬性注入
屬性注入即通過 setter 方法注入Bean 的屬性值或依賴的對象
屬性注入使用 <property> 元素, 使用 name 屬性指定 Bean 的屬性名稱,value 屬性或 <value> 子節點指定屬性值 屬性注入是實際應用中最常用的注入方式
2、構造方法注入
通過構造方法注入Bean 的屬性值或依賴的對象,它保證了 Bean 實例在實例化後就可以使用。
構造器注入在 <constructor-arg> 元素裏聲明屬性, <constructor-arg> 中沒有 name 屬性
按索引匹配入參:
按類型匹配入參: