Spring中的设计模式
Spring中的设计模式
控制反转(IoC)和依赖注入(DI)
IoC是Spring中的一个非常重要的概念,它不是什么技术,而是一种解耦的设计思想,IoC的主要目的是借助于第三方实现具有依赖关系的对象之间的解耦(IOC容器管理对象),从而降低代码之间的耦合度
IoC是一个原则,不是一个模式,以下模式(但不限于)实现了IoC原则
附件不支持打印
Spring IoC容器就像是一个工厂一样,当我们需要创建一个对象时,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。IoC容器负责创建对象,将对象连接在一起,配置这些对象,并从创建中处理这些对象的整个生命周期,直到它们被完全销毁
在实际项目中,一个Service类如果有几百甚至上千个类作为它的底层,我们需要实例化这个Service,你可以每次都要搞清这个Service所有底层类的构造函数,这可能会把人逼疯。若利用IoC的话,只需要配置好,在需要的地方引用就行,大大增加了项目的可维护性且降低了开发难度
控制反转怎么理解呢? 举个例子:"对象 a 依赖了对象 b,当对象 a 需要使用 对象 b 的时候必须自己去创建。但是当系统引入了 IOC 容器后, 对象 a 和对象 b 之间就失去了直接的联系。这个时候,当对象 a 需要使用 对象 b 的时候, 我们可以指定 IOC 容器去创建一个对象 b 注入到对象 a 中"。 对象 a 获得依赖对象 b 的过程,由主动行为变为了被动行为,控制权反转,这就是控制反转名字的由来。
DI(Dependency Inject,依赖注入)是实现控制反转的一种设计模式,依赖注入就是将实例变量传入到一个对象中去
工厂设计模式
Spring使用工厂模式可以通过 BeanFactory 或 ApplicationContext 创建bean对象
两者对比:
•
BeanFactory:延迟注入(使用到某个bean时才会注入),相比于ApplicationContext来说会占用更少的内存,程序启动速度更快
•
ApplicationContext:容器启动时,不管是否用到,一次性创建所有bean,BeanFactory仅提供了最基本的依赖注入支持,ApplicationContext扩展了BeanFactory,除了有BeanFactory的功能外还有额外更多功能,所以一般开发任意使用ApplicationContext会更多
ApplicationContext的三个实现类
1.
ClassPathXmlApplication:把上下文文件当成类路径资源
2.
FileSystemXmlApplication:从文件系统中的XML文件载入上下文定义信息
3.
XmlWebApplicationContext:从Web系统中的XML文件载入上下文定义信息