IOC(概念和原理)


什么是 IOC

(1)控制反轉,把對象創建和對象之間的調用過程,交給 Spring 進行管理
(2)使用 IOC 目的:為了耦合度降低
(3)做入門案例就是 IOC 實現

IOC 底層原理

xml 解析、工廠模式、反射
image

IOC(BeanFactory 接口)

1、IOC 思想基於 IOC 容器完成,IOC 容器底層就是對象工廠
2、Spring 提供 IOC 容器實現兩種方式:(兩個接口)
(1)BeanFactory:IOC 容器基本實現,是 Spring 內部的使用接口,不提供開發人員進行使用

  • 加載配置文件時候不會創建對象,在獲取對象(使用)才去創建對象
    (2)ApplicationContext:BeanFactory 接口的子接口,提供更多更強大的功能,一般由開發人員進行使用
  • 加載配置文件時候就會把在配置文件對象進行創建
    日常開發中,我們都使用ApplicationContext 去獲取xml配置信息。

3、ApplicationContext 接口的實現類有哪些?
image

對FileSystemXmlApplicationContext 和 ClassPathXmlApplicationContext 的解釋
這兩者的主要區別在於 讀取xml文件的路徑。
FileSystemXmlApplicationContext : 讀取硬盤中的位置,即要加上盤符如:C://java/xxx.xml
ClassPathXmlApplicationContext: 直接讀取當前工程下地址即可。
image

IOC 操作 Bean 管理(概念)

1、什么是 Bean 管理
Bean 管理指的是兩個操作:
(1)Spring 創建對象
(2)Spirng 注入屬性

2、Bean 管理操作有兩種方式
(1)基於 xml 配置文件方式實現
(2)基於注解方式實現

IOC 操作 Bean 管理(基於 xml 方式)

1、基於 xml 方式創建對象
image
(1)在 spring 配置文件中,使用 bean 標簽,標簽里面添加對應屬性,就可以實現對象創建
(2)在 bean 標簽有很多屬性,介紹常用的屬性

  • id 屬性:唯一標識
  • class 屬性:類全路徑(包類路徑)

(3)創建對象時候,默認也是執行無參數構造方法完成對象創建

2、基於 xml 方式注入屬性
(1)DI:依賴注入,就是注入屬性

3、第一種注入方式:使用 set 方法進行注入
(1)創建類,定義屬性和對應的 set 方法
image
(2)在 spring 配置文件配置對象創建,配置屬性注入
使用 <property></property> 標簽完成屬性注入,
name:類里面屬性的名稱
value:向屬性注入的值
image
4、第二種注入方式:使用有參數構造進行注入
(1)創建類,定義屬性,創建屬性對應有參數構造方法
image
(2)在 spring 配置文件中進行配置

image

IOC 操作 Bean 管理(xml 注入其他類型屬性)

image

2、注入屬性-外部 bean
1.創建一個UserService類 和 UserDaoImpl 類 和 UserDao接口
2.在UserService中注入UserDaoImpl,並且通過add()方法 再次調用 UserDaoImpl中的update方法
3.在spring配置文件中進行配置

image

image

image

在未使用spring配置文件的情況下,我們是在UserService程序中創建一個UserDao的實現類,通過實現類去調用update方法,在使用spring之后,詳細配置文件看下圖所示:
image

3、注入屬性-內部 bean
(1)一對多關系:部門和員工
一個部門有多個員工,一個員工屬於一個部門
部門是一,員工是多
(2)在實體類之間表示一對多關系,員工表示所屬部門,使用對象類型屬性進行表示

我們創建兩個類,分別是Dept 部門類,Emp 員工類, 其中員工類的屬性有Dept,代表着員工所在的部門信息具體類如下:
image
image

(3)在 spring 配置文件中進行配置
image

還有一種寫法通過對象.屬性的方式進行注入操作。該方法需要有對應的get方法,去得到這個屬性
具體步驟如下所示

image

IOC 操作 Bean 管理(xml 注入集合屬性)

1、注入數組類型屬性
2、注入 List 集合類型屬性
3、注入 Map 集合類型屬性
(1)創建類,定義數組、list、map、set 類型屬性,生成對應 set 方法
image
(2)在 spring 配置文件進行配置
image

如何在List集合中,注入對象屬性,即 List<Book> list; 要求這個集合當中的所有屬性都是Book類型

1.創建Book類,提供set方法
image

2.在配置文件中進行配置,配置內容如下

image

把集合注入部分提取出來

(1)在 spring 配置文件中引入名稱空間 util
image

(2)使用 util 標簽完成 list 集合注入提取
image

(3) 完成對象對List集合屬性的注入即對util標簽的使用
其實也就是通過<bean> 標簽創建對象,然后通過<property>標簽對字段進行賦值操作
<ref>標簽就是引入util標簽內的內容。
image

IOC 操作 Bean 管理(FactoryBean)

1、Spring 有兩種類型 bean,一種普通 bean,另外一種工廠 bean(FactoryBean)
2、普通 bean:在配置文件中定義 bean 類型就是返回類型

3、工廠 bean:在配置文件定義 bean 類型可以和返回類型不一樣
第一步 創建類,讓這個類作為工廠 bean,實現接口 FactoryBean
第二步 實現接口里面的方法,在實現的方法中定義返回的 bean 類型
image

image

image

IOC 操作 Bean 管理(bean 作用域)

1、在 Spring 里面,設置創建 bean 實例是單實例還是多實例
2、在 Spring 里面,默認情況下,bean 是單實例對象

image
3、如何設置單實例還是多實例
(1)在 spring 配置文件 bean 標簽里面有屬性(scope)用於設置單實例還是多實例
(2)scope 屬性值
第一個值 默認值,singleton,表示是單實例對象
第二個值 prototype,表示是多實例對象
image

image
(3)singleton 和 prototype 區別
第一 singleton 單實例,prototype 多實例
第二 設置 scope 值是 singleton 時候,加載 spring 配置文件時候就會創建單實例對象
設置 scope 值是 prototype 時候,不是在加載 spring 配置文件時候創建 對象,在調用
getBean 方法時候創建多實例對象


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM