spring的设计目标(为什么要用spring)
如果我们要简要地描述Spring的设计目标,可以这么说,Spring为开发者提供的是一个一站式的轻量级应用开发框架(平台)。作为平台,Spring抽象了我们在许多应用开发中遇到的共性问题;同时,作为一个轻量级的应用开发框架,Spring和传统的J2EE开发相比,有其自身的特点。通过这些自身的特点, Spring充分体现了它的设计理念:在Java EE的应用开发中,支持POJO和使用JavaBean的开发方式,使应用面向接口开发,充分支持OO(面向对象)的设计方法。
比如,在Java EE应用开发中,传统的EJB开发需要依赖按照J2EE规范实现的J2EE应用服务器。我们的应用在设计,特别是实现时,往往需要遵循一系列的接口标准,才能够在应用服务器的环境中得到测试和部署。这种开发方式,使应用在可测试性和部署上都会受到一些影响。Spring的设计理念采用了相对EJB而言的轻量级开发思想,即使用POJO的开发方式,只需要使用简单的Java对象或者JavaBean就能进行Java EE开发,这样开发的入门、测试、应用部署都得到了简化。
另一方面,在我们的应用开发中,往往会涉及复杂的对象耦合关系,如果在Java代码中处理这些耦合关系,对代码的维护性和应用扩展性会带来许多不便。而如果使用Spring作为应用开发平台,通过使用Spring的IoC容器,可以对这些耦合关系(对Java代码而言)实现一个文本化、外部化的工作,也就是说,通过一个或几个XML文件,我们就可以方便地对应用对象的耦合关系进行浏览、修改和维护,这样,可以在很大程度上简化应用开发。同时,通过IoC容器实现的依赖反转,把依赖关系的管理从Java对象中解放出来,交给了IoC容器(或者说是Spring框架)来完成,从而完成了对象之间的关系解耦: 原来的对象-对象的关系,转化为对象-IoC容器-对象的关系,通过这种对象-IoC容器-对象的关系,更体现出IoC容器对应用的平台作用。
从原文,提炼3点: 1、一站式的轻量级应用开发框 2、作为平台,抽象了应用开发共性问题 3、支持POJO和使用JavaBean的开发方式,使应用面向接口开发,充分支持OO(面向对象)的设计方法
个人理解
一站式:围绕spring核心的一个生态系统,比如springMVC、cloud、data等等
轻量:从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类
共性问题:即完全解耦类之间的依赖关系
面向接口:如下xml片段
<beans default-autowire="byName">
<bean id="Test" class="DemoSpring.Test">
<property name="person" ref="pdao"/>
</bean>
<bean id="pdao" class="DemoSpring.Girl"></bean>
</beans>
DemoSpring依赖的是person接口,ref则指向了具体的实现类DemoSpring.Girl,妥妥的面向接口
以上是spring的设计目标,至于为什么要用spring而不是其他的IOC容器,就拿Google大牛开发的Guice作为比较。
Guice优势在于:
1、速度快,号称比spring快100倍。
2、无外部配置(如需要使用外部可以可以选用Guice的扩展包),完全基于annotation特性,支持重构,代码静态检查。
3、简单,快速,基本没有学习成本。
和spring区别,详见https://www.cnblogs.com/huapox/p/3516382.html
Guice优点是效率高,缺点是代码侵入式(@inject直接侵入代码,耦合到类层面),与其他框架集成没有spring好。 所以Guice更适合与嵌入式或者高性能但项目简单方案,如OSGI容器,spring更适合大型项目组织。 现在的企业级项目中,有哪个是简单的项目呢?