综合技术 --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

相关文章
相关标签/搜索