spring學習筆記 IOC 控制反轉

2021-06-07 17:38:34 字數 2105 閱讀 7318

spring為編寫企業應用程式提供了輕量的解決方案,同時仍然支援使用宣告式事務、 用rmi或web service遠端呼叫、以及使用多種方式來將資料持久化到資料庫。

ioc:控制反轉。也有人這樣叫;di:依賴注入。

aop:面前切面程式設計。

所謂控制反**以前我們要呼叫某個類的方法。首先是new這個類。然後再呼叫這個方法。控制權在我們自己手上。反**顧名思義就是控制權交換了角色。由spring來為我們建立物件了。而不是自己建立了。這裡就用到了乙個設計模式:工廠模式:實際上spring建立的物件就是由工廠來完成的。我們就能獲取到該物件。

首先來看乙個簡單的例子:有乙個person類。它有work的方法。現在我們要在客戶端呼叫這個方法:如果不用spring的話。肯定就是直接new乙個物件呼叫了。

在客戶端呼叫:

xmlbeanfactory factory=new xmlbeanfactory(cpr);//獲取類工廠物件

person chinese= (person)factory.getbean("chinese");//獲取類物件

system.out.println(chinese.sayhi("張三"));//呼叫方法

就可以了。這樣看是不是很麻煩呢。是的。這樣看的確不如直接new乙個物件簡單。但是。如果你的專案大了。你就能省很多事了。

那我們在來乙個複雜一點的。現在person類要借助工具來工作。我們再寫個介面tools工具,它有乙個方法gethelp。在乙個toolsa實現tools工具裡的方法。

首先。我們可以在person類中寫乙個私有的tools變數。然後給他加上setter方法。在work方法中直接用這個變數直接呼叫gethelp方法就行了。

如果還要呼叫其他的也就可以直接寫好實現類。在person類中存放乙個類變數。或介面也行。

然後在配置檔案中配置實現類。並將其放進person類的屬性值裡。就能直接呼叫了。

這就是傳說中的依賴注入。或者說控制反轉。再你呼叫方法之前。它會自動幫你建立好物件。以上其實是依賴注入的其中一種方式:還可用構造器來注入值。例:

public person(tools t,test tt)
如果是這樣配置的。那麼在配置檔案中也要改了。不能再用property屬性了。

前面我們用setter方法和構造器完成了依賴注入:現在我們來用靜態工廠注入。

使用靜態工廠必然要有乙個工廠類。在工廠類寫個返回物件的方法:

public static tools gettools()
然後在person類中還是有這個介面變數。並提供setter方法。其他地方不用變了。最主要的當然是配置檔案了。配置檔案還是要寫的。在配置檔案中依然要把這個工廠類加進來。但是有一點不同:
factory-method:表示在工廠類中哪個方法建立的物件。然後引用也就一樣了。

同時也可用用例項工廠來完成。與靜態工廠類似。

public tools gettools()
其他地方還是不變:就改配置檔案,既然是例項工廠。當然要建立乙個例項工廠物件了。

再引用這個工廠物件

沒有太大的區別。但是我們一般習慣用靜態工廠筆較方便。

再來乙個小巧:

但是在獲取主配置檔案的時候。就可以把這些配置檔案放到陣列裡然後呼叫陣列。

還有乙個;當你的配置檔案中有乙個類被多個地方呼叫。可以把它作為乙個父類。直接掉用這個父類就行了。例如:

這個類被多個地方呼叫

可以把它作為乙個父類:

呼叫時用parent="userparent"就行了。

好吧。對於我寫的這些部落格。大家可能都覺得太小菜了。簡直就不值一提。但對於我這樣的新手。純粹的自學。只能寫出這麼2的文章了。希望大家能能夠踴躍拍磚。。多給我們這樣新手一點建議。。和指點。。感激不盡。

Spring學習筆記 IoC

getbean 方法 引數為class時要保證配置檔案中bean唯一 構造器注入 通過constructor arg節點注入 工廠方法注入 很少使用 繼承 通過在bean中新增屬性parent指定繼承的父bean,也可以忽略父 bean 的 class 屬性,此時 abstract屬性 必須設為 t...

Spring學習筆記 1 之IOC 控制反轉

ioc inverse of control,控制反轉,指的是物件的建立權反轉 交給 spring框架,其作用是實現了程式的解耦合 將控制權移交給spring,通過工廠 反射 配置檔案來實現解耦合 bean物件的建立和銷毀兩個屬性配置 spring允許使用者通過depends on屬性顯示指定bea...

spring的控制反轉 IoC 筆記

需要搭建好 spring環境 實體類 public class people public int getid public void setid int id public string getname public void setname string name 使用ioc功能 使用標籤建立物...