(一)手寫spring IOC容器

2021-10-07 20:36:08 字數 2973 閱讀 3110

設計bean工廠介面

如何告訴他建立bean?

建立什麼bean?

bean工廠實現

畫完整uml類圖

編寫**

測試總結

1. ioc是什麼?

ioc:inversion of control 控制反轉,也稱依賴倒置反轉。

反**依賴物件的獲得權被反轉了,由自己建立,變為從ioc容器獲取,和自動注入。

2. 帶來什麼好處?

- **簡潔,不需要自己new很多類了。

- 面向介面程式設計,使用者與具體類解耦,易擴充套件、替換實現者。

- 可作為基礎模組,供支撐其他高階功能

3. 做什麼工作?

負責建立、管理類例項,向使用者提供例項。

4. 是否是工廠模式的例項?

是的。ioc容器負責建立bean例項,也稱為bean工廠。

1. ioc容器的工作?

- bean是什麼?

元件,就是類的例項物件。

- ioc容器應該具備什麼行為、功能?

負責建立、管理bean。他是乙個bean工廠,負責對外提供bean例項,getbean()方法。

- 這個getbean()方法是否需要引數?需要幾個引數?什麼型別的引數?

根據類的名稱獲取相應的bean是最簡單的,也符合簡單工廠設計,所以只用乙個string引數即可。

- getbean()方法返回值應該是什麼型別?

返回的bean例項可能是所有的型別,所以應該是返回object。

2.設計bean工廠介面

目前只需要提供乙個getbean()的方法。

如何告訴它建立bean?

建立什麼bean?

student stu =

newstudent()

;

工廠方法
public

class

studentfactory

}

靜態工廠方法
public

class

studentfactory

}

3. bean工廠建立bean時需要知道哪些資訊?

構造方法需要知道,類的全路徑名(無參構造方法)。

靜態工廠方法需要知道,工廠類名和方法名。

工廠方法需要知道,工廠bean名(可通過bean工廠獲取工廠bean)和方法名。

4. 單例還是多例?

兩種情況都有。

5. bean定義應該提供哪些方法?

- 獲取bean的類名 getbeanclass():class 有可能是bean的類名或工廠bean的類名

- 獲取工廠方法名 getfactorymethodname(): string

- 獲取工廠bean名 getfactorybeanname():string

- 是否單例等方法 getscope():string 、issingleton():boolean、isprototype():boolean

6. 物件交由ioc容器管理後生命週期還有什麼事情要做?

可能要對bean例項化後進行初始化方法、銷毀前進行的銷毀方法

故應定義getinitmethodname() 、getdestroymethodname.

5. beanfactory實現

- 要實現什麼功能?實現什麼介面?

實現bean工廠和bean定義註冊介面

- 建立的bean用什麼存放,以便獲取?

map- getbean()要做哪些事?

建立bean例項,進行初始化等方法。

- bean定義資訊用什麼存放?

map- bean定義是否可以重名,重名怎麼辦?

可以先簡單設計為不可重名,重名即丟擲異常。

- 擴充套件預設bean工廠

可以提前將單例bean初始化。

詳見附件完整專案。
專案完整**資源

- 測試無參構造器建立bean
public

- 測試靜態工廠方法建立bean

- 測試工廠方法建立bean

TensorFlow實戰(一)手寫數字識別

tensorflow實戰 第一章是基礎,沒什麼好看的,跳過出,第二章是說tensorflow和其他的模組,比如caffe等,caffe以前也說過,比較容易,但是配置比較麻煩 cpu的容易點,gpu比較麻煩 第三章 簡單說一下安裝吧,就行在命令列輸入 前提是你已經有python pip install...

一手寫不出大市場

丁乙乙 手寫板?就是那種給老人用的?在回答記者關於 你是否會購買手寫板 時,一位20來歲的小夥子脫口而出這句話。怎麼會呢?記者真是從來沒有聽到這樣的理論。怎麼不是?我每天網上聊天,雖然打的是全拼,但也蠻快的。有什麼必要再去用手寫?只有那些連拼音也掌握不了的老人才會去用呢!短短幾句話,雖然難免有失偏頗...

手寫spring IOC容器

基本思路 解析xml配置檔案 根據配置的生成相應的物件 將物件存入ioc容器 ioc容器實現 1.0 encoding utf 8 address class com.example.xmlsax reader.entity.address city value fuzhou user class ...