什麼是 IOC
(1)控制反轉,把物件建立和物件之間的呼叫過程,交給 Spring 進行管理
(2)使用 IOC 目的:為了耦合度降低
(3)做入門案例就是 IOC 實現
IOC 底層原理
xml 解析、工廠模式、反射
IOC(BeanFactory 介面)
1、IOC 思想基於 IOC 容器完成,IOC 容器底層就是物件工廠
2、Spring 提供 IOC 容器實現兩種方式:(兩個介面)
(1)BeanFactory:IOC 容器基本實現,是 Spring 內部的使用介面,不提供開發人員進行使用
- 載入配置檔案時候不會建立物件,在獲取物件(使用)才去建立物件
(2)ApplicationContext:BeanFactory 介面的子介面,提供更多更強大的功能,一般由開發人員進行使用 - 載入配置檔案時候就會把在配置檔案物件進行建立
日常開發中,我們都使用ApplicationContext 去獲取xml配置資訊。
3、ApplicationContext 介面的實現類有哪些?
對FileSystemXmlApplicationContext 和 ClassPathXmlApplicationContext 的解釋
這兩者的主要區別在於 讀取xml檔案的路徑。
FileSystemXmlApplicationContext : 讀取硬碟中的位置,即要加上碟符如:C://java/xxx.xml
ClassPathXmlApplicationContext: 直接讀取當前工程下地址即可。
IOC 操作 Bean 管理(概念)
1、什麼是 Bean 管理
Bean 管理指的是兩個操作:
(1)Spring 建立物件
(2)Spirng 注入屬性
2、Bean 管理操作有兩種方式
(1)基於 xml 配置檔案方式實現
(2)基於註解方式實現
IOC 操作 Bean 管理(基於 xml 方式)
1、基於 xml 方式建立物件
(1)在 spring 配置檔案中,使用 bean 標籤,標籤裡面新增對應屬性,就可以實現物件建立
(2)在 bean 標籤有很多屬性,介紹常用的屬性
- id 屬性:唯一標識
- class 屬性:類全路徑(包類路徑)
(3)建立物件時候,預設也是執行無引數構造方法完成物件建立
2、基於 xml 方式注入屬性
(1)DI:依賴注入,就是注入屬性
3、第一種注入方式:使用 set 方法進行注入
(1)建立類,定義屬性和對應的 set 方法
(2)在 spring 配置檔案配置物件建立,配置屬性注入
使用 <property></property>
標籤完成屬性注入,
name:類裡面屬性的名稱
value:向屬性注入的值
4、第二種注入方式:使用有引數構造進行注入
(1)建立類,定義屬性,建立屬性對應有引數構造方法
(2)在 spring 配置檔案中進行配置
IOC 操作 Bean 管理(xml 注入其他型別屬性)
2、注入屬性-外部 bean
1.建立一個UserService類 和 UserDaoImpl 類 和 UserDao介面
2.在UserService中注入UserDaoImpl,並且通過add()方法 再次呼叫 UserDaoImpl中的update方法
3.在spring配置檔案中進行配置
在未使用spring配置檔案的情況下,我們是在UserService程式中建立一個UserDao的實現類,通過實現類去呼叫update方法,在使用spring之後,詳細配置檔案看下圖所示:
3、注入屬性-內部 bean
(1)一對多關係:部門和員工
一個部門有多個員工,一個員工屬於一個部門
部門是一,員工是多
(2)在實體類之間表示一對多關係,員工表示所屬部門,使用物件型別屬性進行表示
我們建立兩個類,分別是Dept 部門類,Emp 員工類, 其中員工類的屬性有Dept,代表著員工所在的部門資訊具體類如下:
(3)在 spring 配置檔案中進行配置
還有一種寫法通過物件.屬性的方式進行注入操作。該方法需要有對應的get方法,去得到這個屬性
具體步驟如下所示
IOC 操作 Bean 管理(xml 注入集合屬性)
1、注入陣列型別屬性
2、注入 List 集合型別屬性
3、注入 Map 集合型別屬性
(1)建立類,定義陣列、list、map、set 型別屬性,生成對應 set 方法
(2)在 spring 配置檔案進行配置
如何在List集合中,注入物件屬性,即 List<Book> list
; 要求這個集合當中的所有屬性都是Book型別
1.建立Book類,提供set方法
2.在配置檔案中進行配置,配置內容如下
把集合注入部分提取出來
(1)在 spring 配置檔案中引入名稱空間 util
(2)使用 util 標籤完成 list 集合注入提取
(3) 完成物件對List集合屬性的注入即對util標籤的使用
其實也就是通過<bean>
標籤建立物件,然後通過<property>
標籤對欄位進行賦值操作
而<ref>
標籤就是引入util標籤內的內容。
IOC 操作 Bean 管理(FactoryBean)
1、Spring 有兩種型別 bean,一種普通 bean,另外一種工廠 bean(FactoryBean)
2、普通 bean:在配置檔案中定義 bean 型別就是返回型別
3、工廠 bean:在配置檔案定義 bean 型別可以和返回型別不一樣
第一步 建立類,讓這個類作為工廠 bean,實現介面 FactoryBean
第二步 實現接口裡面的方法,在實現的方法中定義返回的 bean 型別
IOC 操作 Bean 管理(bean 作用域)
1、在 Spring 裡面,設定建立 bean 例項是單例項還是多例項
2、在 Spring 裡面,預設情況下,bean 是單例項物件
3、如何設定單例項還是多例項
(1)在 spring 配置檔案 bean 標籤裡面有屬性(scope)用於設定單例項還是多例項
(2)scope 屬性值
第一個值 預設值,singleton,表示是單例項物件
第二個值 prototype,表示是多例項物件
(3)singleton 和 prototype 區別
第一 singleton 單例項,prototype 多例項
第二 設定 scope 值是 singleton 時候,載入 spring 配置檔案時候就會建立單例項物件
設定 scope 值是 prototype 時候,不是在載入 spring 配置檔案時候建立 物件,在呼叫
getBean 方法時候建立多例項物件