我的github

实现IOC控制反转的技术叫做反射。而反射通俗的说,反射就是根据给出的类名(字符串)来生成对象。这种编程方式可以让应用在运行时才动态决定生成哪一种对象。反射的应用是很广泛的,像Hibernate、Spring中都是用“反射”做为最基本的技术手段。

其实可以把IoC模式看作工厂模式的升华,把IoC容器看作是一个大工厂,只不过这个大工厂里要生成的对象都是在XML文件中给出定义的。

可以认为IOC是为了解决接口驱动而产生的。那么接口模式有何弊端?

Interface Driven Design叫接口驱动,接口驱动有很多好处,可以提供不同灵活的子类实现,增加代码稳定和健壮性等等,但是接口一定是需要实现的,也就是如下语句迟早要执行:AInterface a = new AInterfaceImp(); 这样一来,耦合关系就产生了,如:

classA
{
    AInterface a;

    A(){}
    
    AMethod()//一个方法
    {
        a = new AInterfaceImp();
    }
}

Class A与AInterfaceImp就是依赖关系,如果想使用AInterface的另外一个实现就需要更改代码了。当然我们可以建立一个Factory来根据条件生成想要的AInterface的具体实现,即:

InterfaceImplFactory
{
   AInterface create(Object condition)
   {
      if(condition == condA)
      {
          return new AInterfaceImpA();
      }
      else if(condition == condB)
      {
          return new AInterfaceImpB();
      }
      else
      {
          return new AInterfaceImp();
      }
    }
}

表面上来看确实是在一定程度上缓解了以上问题,但实质上这种代码耦合并没有改变。通过IoC模式可以彻底解决这种耦合,它把耦合从代码中移出去,放到统一的XML 文件中,通过一个容器在需要的时候把这个依赖关系形成,即把需要的接口实现注入到需要它的类中,这可能就是“依赖注入”说法的来源了。

可见,依赖注入是指接口和它的实现类之间的动态关联的技术。

IOC(控制反转)和DI(依赖注入)的关系:要实现控制反转,需要经过两步,其中第一步是查找依赖,第二步是依赖注入。而要实现这两步需要用到反射技术,以及类似工厂模式的设计风格,只不过这个工厂模式是以XML的方式来展现的。

参考:https://baike.baidu.com/item/控制反转/1158025

posted on 2023-08-01 14:08  XiaoNiuFeiTian  阅读(112)  评论(0编辑  收藏  举报