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! 
相关文章
相关标签/搜索