要了解Spring – Ioc前,我想先來說說 Pojo( Plain Ordinary Java Object / Pure Old Java Object)
Pojo可以被歸類為Java的一個對象(Class),但是一個Java Class卻不能說就是Pojo
因為Java Class可以Implement Interface , Extend Parent Class 但是 Pojo 就是一個
乾淨的 Class 可以包含 參數及方法 卻不能 Implement 及 Extend
Ex :
1 2 3 4 5 6 7 8 9 |
public class MyUser{ public int id ; public void setId(){ …... } public int getId(){ …... } } |
而在Spring – Ioc中可以管理任何的對象,但一般來說通常都會是Pojo Spring – Ioc 可以說是 Spring 的核心思想 可翻譯成控制反轉,但何謂控制反轉,控制甚麼?反轉甚麼?
其實簡單來說就是對Java 對象的控制跟我們一般的認知是相反的,一般來說當我們要建立一個物件的時候都會在應用程式中去 new Object() 並且由應用程式去賦予這個 Object 定義這就是一般的由應用程式去管理,配置所需的物件
Ex:
1 2 3 4 5 6 7 8 9 10 11 |
public class MyPoint { public static void main(String[] args) { MyPoint point = new MyPoint(); } } 此例子就是透過程式去 new MyPoint() 這個物件 |
而在Ioc中則是相反的,Ioc會提供一個容器去產生這些物件,並且配置及管理這些物件,當應用程式需要甚麼物件時再跟Ioc 容器在提供給((DI))應用程式使用,如此一來物件的依賴關係就變成是應用程式依賴Ioc 容器,應用程式也由主動變成被動的等待Ioc來注入(DI)它所需的資源
xml
1 2 3 4 5 |
<bean id="season" class="com.springmvc.demo.Season"> <property name="summer" value="summe" /> </bean> 在Spring 的 xml中定義要產生Season這個物,並定義變數summer的值為summer |
1 2 3 4 5 6 7 8 9 10 11 |
public class SeasonCount { @Autowired private Season season; public Season getSeason() { return season; } } 在應用程式中當我們需使用 Season 這個物件時因為他已經被配置於Spring容器中, 所以我們直接使用 @AutoWired 這個註釋 即可把 Season 的值注入 |
至於 DI ( Dependecy Injection ) 則是 Ioc 的核心 當 Ioc 幫我們創建完對象後 在應用程式運行時動態的去注入所依賴的對象
總結:
- Spring-Ioc 負責創建管理對象( Pojo ) >> 創建的對象會放在一個容器中
- 當應用程式需要使用某些對象時 由容器提供使用
- 應用程式的使用對象所需的資源由Ioc注入
- 應用程式依賴著 Ioc , 並且需要Ioc 提供對象所需的資源
5.Ioc 是一種思想,所以他可以被應用至其他地方並不是局限於Spring
以上是 Spring-Ioc 的基本概觀 , 接下來要探討的就是 Spring 在程式碼中是用甚麼方式去實現Ioc 對物件的創建,配置與管理