Spring Framework是指什么?有什么优点?

XIAO 2020-04-01 11:37:28 java常见问答 6806

对于有相当的java开发经验的小伙伴们来说,Spring Framework确实比较经常接触,那么,还是有些朋友们确实不是很了解这个框架,下面我们就一起来看Spring Framework到底是指的什么样的框架?它有什么值得我们程序员青睐的地方呢?

百度百科上是这样介绍的:首先它是一个开源的项目,而且非常活跃;它是一个基于IOC和AOP的构架多层j2ee系统的框架,但它不强迫你必须在每一层中必须使用Spring,因为它模块化的很好,允许你根据自己的需要选择使用它的某一个模块;它实现了很优雅的MVC,对不同的数据访问技术提供了统一的接口,采用IOC使得可以很容易的实现bean的装配,提供了简洁的AOP并据此实现Transaction Management,等等......

或许我们可以这样看:Spring Framework主要有20个模块组成,这些模块主要组成Core Container、Data Access/Integration、Web、AOP、Instrumentation、Message和Test几部分(见下图,取自Spring官方文档)

Spring Framework是指什么?有什么优点?

下面我们具体看看每个部分的具体功能和组成模块:

Core Container。由spring-core、spring-beans、spring-context、spring-context-support和spring-expression这几个模块组成。

spring-core&spring-beans模块是整个框架的基础部分,主要特性是Ioc容器和DI,而Ioc容器的的核心类是BeanFactory接口,它是应用工厂模式的实现。

spring-context模块是基于Core和Beans模块构建的,它继承了Beans模块的特性并增加了对国际化(例如使用资源包)、事件传递、资源加载和透明创建上下文(例如被servlet容器创建),同时也支持了Java EE的例如EJB、JMX和远程处理等的特性。其中ApplicationContext接口是整个模块的关键点。而spring-context-support模块提供了将第三方功能集成进Spring 应用上下文中,例如caching (EhCache, Guava, JCache), mailing (JavaMail), scheduling (CommonJ, Quartz) and template engines (FreeMarker, JasperReports, Velocity)。

spring-expression模块为运行时查询和操纵对象图提供了强大的EL(基于JSP 2.1规范中定义的unified EL),支持存取属性值、实行分配、方法调用、访问数组及集合的内容、逻辑和算术运算、命名变量以及在Spring Ioc容器中通过名称查找对象。

AOP & Intrumentation。由spring-aop、spring-aspects、spring-instrument和spring-instrument-tomcat模块组成。spring-aop模块通过使用aop提供的方法拦截器和切点来解耦具体业务代码和通用业务功能。其中spring-aspects模块是Spring在切面编程上对AspectJ的集成。

spring-instrument模块提供了对特定应用服务器classloader和class instrumentation的支持,其中spring-instrument-tomcat模块提供了Spring对tomcat服务器的代理检测。

Messaging。包括spring-message模块是Spring集成项目(例如 Message, MessageChannel, MessageHandler等)为基于消息传递的应用服务的关键抽象,包含一系列的从消息映射到方法的注解,类似于SpringMVC基于编程模型的注解。

Data Access/Integration。数据访问和集成层由JDBC、ORM、OXM、JMS和Transaction模块组成。spring-jdbc模块提供了jdbc抽象层,抽离了繁琐的jdbc代码和针对特定数据库的错误代码。

spring-tx模块对实现了特定接口的类提供了编程式和声明式事务管理,并且对所有的POJO类都支持这种特性。

spring-orm模块集成了通用对象关系映射接口,包括JPA、JDO和Hibernate等。使用spring-orm模块可以使这些orm框架可以和Spring提供的其他所有特性联合使用,例如前边提到的简单声明式事务管理特性。

spring-oxm模块提供了支持Object/XML 映射实现的抽象层,这些oxm实现包括JAXB, Castor, XMLBeans, JiBX and XStream。

spring-jms模块包括生产和消费消息的特性。从Spring-Framework 4.1开始提供了和spring-message模块集成的支持。Web层由spring-web、spring-webmvc、spring-websocket和spring-webmvc-portlet组成。

spring-web模块提供了面向Web的基础功能的集成,例如多文件上传和使用Servlet监听Ioc容器的初始化特性,和面向Web的应用上下文。同时也包含了HTTP客户端以及Spring远程调用中和Web相关的部分。

spring-webmvc(web-servlet)包含了spring mvc的实现和为web应用提供的REST 服务的实现。它使领域模型和web表单完全分离,同时也可以集成其它spring-framework的特性。

spring-webmvc-portlet(web-portlet)提供了在Portlet环境中使用的mvc实现,并反映了spring-webmvc模块的功能。

spring-test模块通过JUnit和TestNG提供了单元测试和集成测试。它提供了一致性加载和缓存Spring上下文,也提供了用于单独测试使用的模拟对象。

根据以上模块可以看到该框架有这些优点:

非侵入式设计

Spring是一种非侵入式(non-invasive)框架,它可以使应用程序代码对框架的依赖最小化。

方便解耦、简化开发

Spring就是一个大工厂,可以将所有对象的创建和依赖关系的维护工作都交给Spring容器的管理,大大的降低了组件之间的耦合性。

支持AOP

Spring提供了对AOP的支持,它允许将一些通用任务,如安全、事物、日志等进行集中式处理,从而提高了程序的复用性。

支持声明式事务处理

只需要通过配置就可以完成对事物的管理,而无须手动编程。

方便程序的测试

Spring提供了对Junit4的支持,可以通过注解方便的测试Spring程序。

方便集成各种优秀框架

Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如Struts、Hibernate、MyBatis、Quartz等)的直接支持。

降低Jave EE API的使用难度。

Spring对Java EE开发中非常难用的一些API(如JDBC、JavaMail等),都提供了封装,使这些API应用难度大大降低。

这样的话我们应该也是可以理解为什么目前Spring Framework框架这么受欢迎了,如果还想了解更多相关内容,不要忘记关注本站哦。