綜合技術 --spring框架--控制反轉

Spring框架的核心就是控制反轉(IOC)和依賴注入(Dependency Injection),經過這兩個方面來實現耦合。html

使用Ioc,對象是被動的接受依賴類,而不是主動的去找。容器在實例化的時候主動將它的依賴類注入給它。通俗理解:控制反轉就是將類的主動權轉移到接口上,依賴注入經過xml配置文件在類實例化時將其依賴注入。java

經過一個實際的例子來理解:
spring

假設需求爲:類Business須要調用類Dependency的方法f()。框架

咱們常規作法以下:測試

//1.建立類Dependency
public class Dependency
{
    //建立類的方法
    public void f() {};
}
//2.建立類Business
public class Business
{
    //屬性
    Dependency  d;
    //方法
    //方法功能:new一個實例對象
    public Business()
    {
        d = new Dependency();
    }
   public void doSth()
    {
        d.f();
   }
}
//3.建立對象,調用方法
b = new Business();
b.doSth;

在此,針對如上方法作出一些修改this

1.將Business裏面的Dependency實例的得到改成setter方式spa

2.將Dependency類改成某個接口的實現code

//1.建立類Dependency
public class Dependency
{
    public void f() {};
}
//2.建立接口Idependency
public interface Idependency
{
   //這個方法的參數能夠是一個對象
    void f();
}
//3.建立類Business
public class Business
{
    Idependency d;
    public void setDependency(Idependency d)
    {
        this.d =d;
    }
   public void doSth()
    {
        d.f();
    }
}

在如上代碼中,orm

1.Business的實例變量d能夠接收任何Idependency類型的實例對象xml

2.Dependency的實例對象不是經過Business來得到,而是經過接口中方法的參數傳進來

3.Dependency的實例對象如何從外部注入給Business呢?這就要經過xml文件來實現。

4.建立一個SpringXX.xml文件,進行簡單配置:

<beans>
    <bean id = "dependency"  class = "xx.xx.Dependency" />
    <bean id = "business"        calss = "xx.xx.Business" >
        <property name = "dependency">
        <ref bean = "dependency" />
        </property>
     </bean>
</beans>

如上的配置文件裏將Dependency類和Business類加入,並將Dependency的實例對象做爲Business實例對象的方法的一參數。

5.寫一個測試類來加載xml文件,spring提供了現成的API,在加載上面的xml文件的時候,完成了以下工做:1>實例化Dependency類和Business類,並將Dependency的實例對象做爲參數賦值給了Business的實例對象的setDependency()方法。測試程序以下:

public class CeShi
{
    public static void main(String [] args)
    {
        //1.加載xml文件
        XXclass xx = new XXclass("SpringXX.xml");
        BeanFactory factory = new XmlBeanFactory(xx);
        //2.實例對象
        Business  b = (Business)factory.getBean("business");
        //3.用實例的對象調用方法
        b.doSth();
    }
}

上面的程序加載了xml文件後,得到id爲"business"的bean,即Business類的實例,並調用了他的方法doSth()。因而可知,Business的依賴包Dependency是經過xml來注入的,而且Business是經過接口Idependency來接收Dependency實例。所以,有新的Idependency的實現時,只須要修改xml文件便可,測試程序只須要根據xml裏面的id值來得到須要的參數便可。

總結,經過上面的例子,對控制反轉和依賴注入已經能理解了,依賴類(Dependency)是經過外部(xml)來注入的,而不是使用它的類(Business)來本身建立,這就是依賴注入。另外一方面,Business對類Dependency的依賴轉移到對接口Idependency的依賴,控制權由類轉到了接口,即由「實現」轉移到「抽象」中,這就是控制反轉。



控制反轉(Ioc)的理解

很簡單,原本該咱們本身作的事情,咱們不作,讓系統去作。例如,當咱們須要調用某個對象的實例方法時,咱們每每須要先new出這個實例對象,再用實例對象去調用方法;若是使用了控制反轉,則咱們不須要作如上事情了,只須要在配置文件xml裏面配置好就行,系統幫咱們new實例對象。

依賴注入的理解

spring主動建立被調用類的對象,而後把這個對象注入到咱們本身的類中,使得咱們可使用它。

//參考例子

http://www.cnblogs.com/xing901022/p/3963962.html

相關文章
相關標籤/搜索