Spring IOC与工厂模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring IOC与工厂模式相关的知识,希望对你有一定的参考价值。

参考技术A      IoC(Inverse of Control:控制反转)是⼀种设计思想,就是 将原本在程序中⼿动创建对象的控制权,交由Spring框架来管理。

      IoC 在其他语⾔中也有应⽤,并⾮ Spring 特有。 IoC 容器是 Spring⽤来实现 IoC 的载体, IoC 容器实际上就是个Map(key,value),Map 中存放的是各种对象。将对象之间的相互依赖关系交给 IoC 容器来管理,并由 IoC 容器完成对象的注⼊。这样可以很⼤程度上简化应⽤的开发,把应⽤从复杂的依赖关系中解放出来。 

    IoC 容器就像是⼀个⼯⼚⼀样,当我需要创建⼀个对象的时候,只需要配置好配置⽂件/注解即可,完全不⽤考虑对象是如何被创建出来的。在实际项⽬中⼀个 Service 类可能有⼏百甚⾄上千个类作为它的底层,假如我们需要实例化这个Service,你可能要每次都要搞清这个 Service 所有底层类的构造函数,这可能会把⼈逼疯。如果利⽤IoC 的话,你只需要配置好,然后在需要的地⽅引⽤就⾏了,这⼤⼤增加了项⽬的可维护性且降低了开发难度。

  我们来看看执行过程:

   1.  读取Bean配置信息放入Bean定义注册表

    2. 根据Bean注册表实例化Bean

    3. 将实例化之后的bean实例放入Bean缓存池(HashMap实现)

    4. 应用程序通过类名从Bean缓存池中取出Bean实例

     工厂模式(Factory Pattern)。工厂模式可将Java对象的调用者从被调用者的实现逻辑中分离出来。工厂模式是Java中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。

     这么讲可能有点抽象,简单的说就是以后我们不用自己new对象了,对象的实例化都交给工厂来完成,我们需要对象的时候直接问工厂拿一个就行,一会我们会来看一个例子。在这里有一点要说明,spring IOC与工厂模式并不是完全相同的,最大的不同在于普通的工厂模式内部还是使用new来创建对象,但是spring IOC是用反射来创建对象,这么做有什么好处呢?

     反射就在这一句上,我们通过类的全类名来创建了对象,全类名来自于我们的Properties对象,也就是读取我们的配置文件产生的对象,对标spring IOC容器中的Bean定义注册表。

以上是关于Spring IOC与工厂模式的主要内容,如果未能解决你的问题,请参考以下文章

Spring IOC下的工厂模式

Spring的IOC分析

工厂模式与控制反转

工厂方法与FactoryBean

Spring Ioc源码深入剖析预备知识

理解Spring中的IOC和AOP