spring的IoC容器解析

控制反轉(IoC=Inversion of ControlIoC,用白話來說,就是由容器控制程序之間的(依賴)關係,而非傳統實現中,由程序代碼直接操控。這也就是所謂「控制反轉」的概念所在:(依賴)控制權由應用代碼中轉到了外部容器,控制權的轉移,是所謂反轉。由spring來負責控制對象的生命週期和對象間的關係。 spring

全部的類都會在spring容器中登記,告訴spring你是個什麼東西,你須要什麼東西,而後spring會在系統運行到適當的時候,把你要的東西主動給你,同時也把你交給其餘須要你的東西。全部的類的建立、銷燬都由 spring來控制,也就是說控制對象生存週期的再也不是引用它的對象,而是spring。對於某個具體的對象而言,之前是它控制其餘對象,如今是全部對象都被spring控制,因此這叫控制反轉。 數據庫

DIDependency Injection)依賴注入,IoC的一個重點是在系統運行中,動態的向某個對象提供它所須要的其餘對象。這一點是經過DIDependency Injection,依賴注入)來實現的。好比對象A須要操做數據庫,之前咱們老是要在A中本身編寫代碼來得到一個Connection對象,有了 spring咱們就只須要告訴springA中須要一個Connection,至於這個Connection怎麼構造,什麼時候構造,A不須要知道。在系統運行時,spring會在適當的時候製造一個Connection,而後像打針同樣,注射到A當中,這樣就完成了對各個對象之間關係的控制。A須要依賴 Connection才能正常運行,而這個Connection是由spring注入到A中的,依賴注入的名字就這麼來的,而依賴注入(DI)是經過反射來實現的。 app

      

  
  
  
  
  1.  
  2. public static void main(String[] args) {  
  3.   ApplicationContext context = new FileSystemXmlApplicationContext(  
  4.     "applicationContext.xml");  
  5.   Animal animal = (Animal) context.getBean("animal");  
  6.   animal.say();  
  7.  }  
  8.  
  9.  
  10. //這段代碼你必定很熟悉吧,不過仍是讓咱們分析一下它吧,首先是applicationContext.xml  
  11. <bean id="animal" class="phz.springframework.test.Cat">  
  12.   <property name="name" value="kitty" />  
  13.  </bean>  
  14.  
  15.  
  16. //他有一個類phz.springframework.test.Cat  
  17. public class Cat implements Animal {  
  18.  private String name;  
  19.  public void say() {  
  20.   System.out.println("I am " + name + "!");  
  21.  }  
  22.  public void setName(String name) {  
  23.   this.name = name;  
  24.  }  
  25. }  
  26.  
  27. //實現了phz.springframework.test.Animal接口   
  28. public interface Animal {  
  29.  public void say();  
  30. }  
  31. //很明顯上面的代碼輸出I am kitty! 
相關文章
相關標籤/搜索