Spring | 初识Spring

1 Spring是什么?

Wikipedia中这样解释:
The Spring Framework is an application framework and inversion of control container for the Java platform. The framework’s core features can be used by any Java application, but there are extensions for building web applications on top of the Java EE (Enterprise Edition) platform. Although the framework does not impose any specific programming model, it has become popular in the Java community as an addition to, or even replacement for the Enterprise JavaBeans (EJB) model. The Spring Framework is open source.
Spring是一种JAVA平台的运用程序框架和控制反转容器,该框架的核心特征可运用于任何java运用,而且可在java EE平台上用于扩展构建web运用程序。尽管该框架没有强制使用任何特定的编程模型,但是作为EJB模型的补充,甚至是替代品,它在java社区中已经非常流行,且Spring框架是开源的。

首先Spring作为JAVA平台的一种框架而存在。那么如何理解框架?
在本人初学JAVA之时,经常听到周边大神讨论各种框架,而我疑惑到底什么是框架?为什么要有框架?框架有什么用?对于这种灵魂三问,我尝试着说说我的理解吧。
不理解为什么会有框架的原因在于,知识面和运用场景的限制。早期学JAVA只是停留在JAVA语言的特性和零散知识点上,那个时候关注的是JAVA语言本身,比如数据类型、运算符、类和方法、反射、代理和泛型等语言特性,学的深的或许还会顺带着学学设计模式,而JAVA主要使用场景是构建运用程序,由于运用程序的复杂性和多变性,急需一种能够处理这个问题的方法。这个时候框架就出来了;所以随着对JAVA语言的不断学习和使用,自然而然就接触到框架了。
那么框架有什么用?换句话说,框架能够带来什么好处?在讨论框架有什么用之前,还需要讨论没有框架之前是如何编写JAVA运用程序的;我们知道JAVA是一种面向对象的语言,万物皆对象,因此运用程序中最主要的问题除了逻辑业务之外就是处理对象之间的关系;在没有使用框架之前,对象之间的关系在编译器就已经确定,需要使用的时候根据类之间的依赖关系来加载并生成对象(这样有什么不好?),如果有一种方法能够帮助类生成并管理本身及其依赖的对象,使得类本身专注业务逻辑,Spring框架就出来了
理解了框架的作用也就不难理解什么是框架。简单的说,框架就是已经完成的主体结构,实现系统中与业务无关的功能,帮助工程师简化开发过程。Spring框架自然也提供诸多与业务无关的功能,如日志记录、性能统计等。

概念中还提到一点:控制反转容器。Spring作为一个控制反转容器,这是什么意思呢?控制反转是Spring的核心功能之一,控制反转容器又是什么?后面给出答案。

2 Spring有哪些作用?

上面说到框架就是已经帮程序员搭好了整体架构,完成了与业务无关的部分,实现了稳定通用的功能。下面详细看一下Spring框架提供了哪些功能。

  • 通过配置文件创建对象并管理对象间的依赖关系
    这是Spring的核心功能之一,通过配置文件创建对象并管理对象间的依赖关系,即我们常说的控制反转(Inversion of Control)IOC,也称依赖注入(Dependency Injection)DI。
  • 通过切面编程实现日志记录、性能统计和权限控制等于业务无关的通用逻辑
    Spring的又一核心功能,切面编程(Aspect Oriented Programming)AOP好似把一个正常的流程横切一刀,在切面上做各种与业务无关的操作。
    AOP
  • 提供数据库事务管理
    数据库事务管理主要指Spring帮程序员简化数据库操作步骤。
    事务管理
  • 提供与其他框架的集成
    为了提升Spring框架的使用场景,框架本身易于与其他ORM框架、WEB框架集成。
3 Spring有哪些突出的特点?为什么要使用它?
  • 非侵入式,轻量级的框架。所谓非侵入式是指业务代码与框架代码没有任何联系(无继承,无依赖,无关联),当修改框架或者更新版本时,原有的业务代码不需要作任何修改,即完全耦合。
  • 良好的可扩展性,可与其他web框架、ORM框架无缝集成。比如常见的Struts、Hibernate以及JSF(JavaServer Faces)等。
  • 面向切面编程可以简化代码,使代码能关注业务逻辑本身,而不需要关注共性的代码,如日志记录、性能统计和权限控制等
4 Spring的基本组成部分有哪些内容?

Spring
图片来源“跟我学Spring”系列。
Spring框架主要包括图示中5部分,下面分别介绍:
① 核心容器Core Container:容器是Spring框架最核心的部分,包括Beans包、Core包、Context包和Expression Language包。

  • Beans包主要解决Bean的定义、Bean的创建以及对Bean的解析;Spring框架已经封装好Bean的定义和对Bean的解析,我们只需关注Bean的创建,即通过XML文档配置Bean的创建规则。至于Bean如何定义以及Bean如何解析后续会有详细文章出来。
  • Context是一个Bean关系的集合,这个关系的集合又叫IOC容器,所以它的主要作用是建立并维系好各bean之间关系。
  • Core是发现、建立和维护每个Bean之间的关系所需要的一系列工具。
    三者之间的关系可用下面的图来表示:
    Beans
  • EL包主要提供表达式语言支持,运用于整个框架中。

② 切面编程AOP:在这个模块,Spring对面向切面编程提供了丰富的支持。与DI一样,AOP可以帮助运用对象解耦,并且可以将遍布系统的关注点(如事务和安全)从它们所应用的对象中解耦出来,Spring通过动态代理实现AOP。

③ 数据访问与集成Data Access/Integration:此模块的主要作用在于简化数据库层面的操作,且构建一个语义丰富的异常层。

  • JDBC模块:提供JDBC样例模板,消除传统冗长的JDBC编码和事务控制。-ORM(Object-Relational Mapping)模块:提供与当今流行的“对象-关系”映射框架无缝集成,如Hibernate、Java Persisternce API、Java Data Object和mybatis。
  • OXM(Object/XML Mapping)模块:提供一个对Object/XML映射实现,将Java对象映射成XML数据,或者XML数据映射成Java对象,Object/XML映射实现包括JAXB、Castor、XMLBeans和XStream。
  • JMS(Java Message Service)模块:JMS用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。
  • Transactions模块:Spring框架的事务管理,无需在代码中进行事务管理,支持编程和声明性的事务管理。

④ Web与远程调用Web(MVC/Remoting):MVC(Model-View-Controller)可以帮助用户将页面逻辑与应用逻辑分离,虽然Spring可以与各种MVC框架进行集成,但其本身也自带一个强大的MVC框架,帮助在Web层提升应用的松耦合水平。

  • web模块:提供了多种构建与其他应用交互的远程调用方案,如RMI(Remote Method Invocation),Hessian,Burlap等,同时Spring还自带一个远程调用框架:HTTP invoker。
  • servlet模块:提供一个Spring MVC Web框架实现。Spring MVC框架提供了基于注解的请求资源注入、简单的数据绑定、数据验证等及一套非常易用的JSP标签,完全无缝与Spring其他技术协作。
  • Struts模块:提供了与Struts无缝集成。
  • portlet模块:基于java的web组件,由portlet容器管理,并由容器处理请求,生产动态内容。

⑤ 测试Test:Spring为使用JNDI、Servlet和Portlet编写单元测试提供了一系列的mock对象实现,对于集成测试,该模块为加载Spring应用上下文中的Bean集合以及Spring上下文中的bean进行交互提供了支持。

5 Spring使用场景有哪些?
  • 常见的Web应用程序;
  • 远程访问
  • EJB等
参考资料

《深入分析Java Web技术内幕》 许令波
《Spring实战》第四版
portlet理解:https://hintcnuie.iteye.com/blog/906016
RMI理解:https://www.cnblogs.com/xt0810/p/3640167.html
Hessian理解:https://blog.csdn.net/sunwei_pyw/article/details/74002351
Burlap理解:https://www.cnblogs.com/qujiajun/p/4074615.html
HTTP invoker理解:https://blog.csdn.net/BabyGoodMorning/article/details/79476356

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值