什麼是 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 方法時候創建多實例對象

IOC(概念和原理)的更多相關文章

  1. Spring之旅第二篇-Spring IOC概念及原理分析

    一.IOC概念 上一篇已經了解了spring的相關概念,並且創建了一個Spring項目.spring中有最重要的兩個概念:IOC和AOP,我們先從IOC入手. IOC全稱Inversion of Co ...

  2. spring框架的IOC的底層原理

    1.IOC概念:spring容器創建對象並管理 2.IOC的底層原理的具體實現: 1)所使用的技術: (1). dom4j解析xml配置文件 (2).工廠設計模式(解耦合) (3).反射 第一步:配置 ...

  3. IOC的實現原理—反射與工廠模式的結合

    反射機制概念   我們考慮一個場景,如果我們在程序運行時,一個對象想要檢視自己所擁有的成員屬性,該如何操作?再考慮另一個場景,如果我們想要在運行期獲得某個類的Class信息如它的屬性.構造方法.一般方 ...

  4. Oracle 集群】ORACLE DATABASE 11G RAC 知識圖文詳細教程之ORACLE集群概念和原理(二)

    ORACLE集群概念和原理(二) 概述:寫下本文檔的初衷和動力,來源於上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期對oracle基礎知識學習的匯總.然後形成體 ...

  5. Java中的泛型 (上) - 基本概念和原理

    本節我們主要來介紹泛型的基本概念和原理 後續章節我們會介紹各種容器類,容器類可以說是日常程序開發中天天用到的,沒有容器類,難以想象能開發什麼真正有用的程序.而容器類是基於泛型的,不理解泛型,我們就難以 ...

  6. Java線程:概念與原理

    Java線程:概念與原理 一.操作系統中線程和進程的概念 現在的操作系統是多任務操作系統.多線程是實現多任務的一種方式. 進程是指一個內存中運行的應用程序,每個進程都有自己獨立的一塊內存空間,一個進程 ...

  7. 【轉】Bloom Filter布隆過濾器的概念和原理

    轉自:http://blog.csdn.net/jiaomeng/article/details/1495500 之前看數學之美麗,裏面有提到布隆過濾器的過濾垃圾郵件,感覺到何其的牛,竟然有這麼高效的 ...

  8. Java IO學習筆記:概念與原理

    Java IO學習筆記:概念與原理   一.概念   Java中對文件的操作是以流的方式進行的.流是Java內存中的一組有序數據序列.Java將數據從源(文件.內存.鍵盤.網絡)讀入到內存 中,形成了 ...

  9. iptables實用教程(一):基本概念和原理

    概述 iptables是linux自帶的防火牆軟件,用於配置IPv4數據包過濾或NAT(IPv6用ip6tables). 在linux上,防火牆其實是系統內核的一部分,基於Netfilter構架,基本 ...

  10. LDAP概念和原理介紹

    LDAP概念和原理介紹 相信對於許多的朋友來說,可能聽說過LDAP,但是實際中對LDAP的了解和具體的原理可能還比較模糊,今天就從“什麼是LDAP”.“LDAP的主要產品”.“LDAP的基本模型”.“ ...

隨機推薦

  1. 關於去除Dialog的黑色背景框

    Dialog有兩種形式的,一個是Dialog及其子類,還有一種是Activity的Dialog顯示方式. 不管怎樣,在自定義Dialog的時候,如果不做一些處理,都會出現黑色背景邊框,這個問題動不動就 ...

  2. make it clear how to use const in C++

    1.first of all,take a lookup on the left side of keyword const.If there is something(type or pointer ...

  3. C語言中exit()與return的區別

    整理自exit函數和return函數 1.exit函數和return函數的主要區別是: 1)exit用於在程序運行的過程中隨時結束程序,exit的參數是返回給OS的.main函數結束時也會隱式地調用e ...

  4. The Swift Programming Language-官方教程精譯Swift(9) 枚舉-- --Enumerations

    枚舉定義了一個通用類型的一組相關的值,使你可以在你的代碼中以一個安全的方式來使用這些值.   如果你熟悉 C 語言,你就會知道,在 C 語言中枚舉指定相關名稱為一組整型值.Swift 中的枚舉更加靈活 ...

  5. memset和fill_n區別

    1. 函數名: memset 所屬頭文件:<string.h> 用法:void *memset(void *s, char ch, unsigned n); 對於對int之類的數組,只能用 ...

  6. FFmpeg 結構體學習(三): AVPacket 分析

    在上文FFmpeg 結構體學習(二): AVStream 分析我們學習了AVStream結構體的相關內容.本文,我們將講述一下AVPacket. AVPacket是存儲壓縮編碼數據相關信息的結構體.下 ...

  7. Spock - Document -06 - Modules

    Modules Peter Niederwieser, The Spock Framework TeamVersion 1.1 Guice Module Integration with the Gu ...

  8. 第85節:Java中的JavaScript

    第85節:Java中的JavaScript 複習一下css: 選擇器的格式: 元素選擇器:元素的名稱{} 類選擇器:. 開頭 ID選擇器:# ID選擇器 後代選擇器: 選擇器1 選擇器2 子元素選擇器 ...

  9. css-animate制作列錶鼠標移動覆蓋透明層

    效果 比列使用bootcdn加速 html <!DOCTYPE html> <!-- saved from url=(0065)javascript:; --> <htm ...

  10. 開源項目收集:博客系統solo

    前言 一個好的項目,我不會吝嗇於推薦之語.找了好久,想要一個最簡單的個人博客.由於個人不怎麼會寫前端頁面,怎麼也看不到漂亮的設計.沒有漂亮的前臺都不知道後臺需要寫一些什麼! 這個項目至少目前滿足了我的 ...