文档章节

【60】Spring总结之基础架构(1)

fengsehng
 fengsehng
发布于 2016/11/09 09:15
字数 1771
阅读 12
收藏 1

为什么用Spring?

Spring一直贯彻并遵守“好的设计优于具体实现,代码应易于测试”,这一理念,并最终带给我们一个易于开发、便于测试而又功能齐全的开发框架。概括起来Spring给我们带来以下好处:

1、方便解耦,简化开发

通过Spring的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码照成的过度程序耦合。有了Spring,用户不必再为单例模式类、属性文件解析等这些很底层的需求编写代码,可更专注与上层应用。

2、AOP编程的支持

通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。

3、声明式事务的支持

在Spring中我们可以从单调烦闷的事物管理代码中解脱出来,通过声明式方式灵活的进行事物管理,提高开发效率和质量。

4、方便程序的测试

可以用非容器依赖的方式进行几乎所有的测试工作,在Spring里测试不再是昂贵的操作,而是随手可做的事情。

5、方便集成各种优秀框架

Spring不排斥各种优秀框架,相反,Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts、Hibernate、Mybatis、Hessian、Quartz等)的直接支持。

6、降低Java EE API的使用难度

Spring对很多难用的Java EE API(如JDBC、JavaMail,远程调用等)提供了一个薄薄的封装层,通过Spring的简易封装,这些API的使用难度大为降低。

7、Spring源码是经典学习范例

Spring的源码设计精妙、结构清晰、匠心独用,处处体现着大师对Java设计模式的灵活运用以及对Java技术的高深造诣。Spring框架源码无疑是Java技术的最佳实践范例。如果想在短时间内迅速提高自己的Java水平和应用开发水平,学习和研究Spring源码将会使你收获到意想不到的效果。

Spring的结构图:

这里写图片描述

结构介绍:

Spring 框架的分为7个模块,组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:

1.核心容器

:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
  

2.Spring 上下文

:Spring 上下文是一个配置文件,向 Spring 框架提上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
  

3.Spring AOP

:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。

4. Spring DAO

:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。

5.Spring ORM

:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
  

6. Spring Web 模块

:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
 

7. Spring MVC 框架

:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。

Spring有如下优点:

1.低侵入式设计,代码污染极低  
2. 独立于各种应用服务器,可以真正实现Write Once,Run Anywhere的承诺  
3.Spring的DI机制降低了业务对象替换的复杂性  
4.Spring并不完全依赖于Spring,开发者可自由选用Spring框架的部分或全部

IOC 和 AOP

控制反转模式(也称作依赖性介入)的基本概念

以前传统的java开发模式中,当需要一个对象时我们,我们会自己使用new或者getInstance等直接或者间接调用构造方法创建一个对象,而在Spring开发模式中,Spring容器使用了工厂模式为我们创建了所需要的对象,我们使用时不需要自己去创建,直接调用Spring为我们提供的对象即可,这就是控制反转的思想。实例化一个java对象有三种方式:使用类构造器,使用静态工厂方法,使用实例工厂方法,当使用spring时我们就不需要关心通过何种方式实例化一个对象,spring通过控制反转机制自动为我们实例化一个对象。

依赖注入(DI):

Spring使用java Bean对象的Set方法或者带参数的构造方法为我们在创建所需对象时将其属性自动设置所需要的值的过程就是依赖注入的基本思想。

面向切面编程(AOP):

在面向对象编程(OOP)思想中,我们将事物纵向抽象成一个个的对象。而在面向切面编程中,我们将一个个对象某些类似的方面横向抽象成一个切面,对这个切面进行一些如权限验证,事物管理,记录日志等公用操作处理的过程就是面向切面编程的思想。

我的微信二维码如下,欢迎交流讨论

这里写图片描述

欢迎关注《IT面试题汇总》微信订阅号。每天推送经典面试题和面试心得技巧,都是干货!

微信订阅号二维码如下:

这里写图片描述

参考:
http://my.oschina.net/u/1476426/blog/598554
http://blog.csdn.net/zhixiang2010/article/details/18404567
http://codepub.cn/2015/06/21/Basic-knowledge-summary-of-Spring/

© 著作权归作者所有

共有 人打赏支持
fengsehng
粉丝 4
博文 284
码字总数 214494
作品 0
朝阳
程序员
私信 提问
“过时”的SpringMVC我们到底在用什么?深入分析DispatchServlet源码

之前已经分析过了Spring的IOC(《零基础带你看Spring源码——IOC控制反转》)与AOP(《从源码入手,一文带你读懂Spring AOP面向切面编程》)的源码,本次就来分析下SpringMVC。本文先简述下目前S...

公众号_Zack说码
2018/11/22
0
0
微服务架构实战学习(四):RPC 框架对比

下面是对市面上比较流行的 RPC 框架的对比 以上对比是我结合各框架的网上资料以及官方文档资源总结的,在实际的使用过程中。我们可以结合我们的业务场景来选择不同的框架。 虽然说没有最好的...

雨林_a1d6
2018/06/11
0
0
Java基础教程:tutorialspoint-spring mvc

教程: 来自turorialspoint的Spring MVC 4.1.6教程(英文),官网:https://www.tutorialspoint.com/springmvc/index.htm 离线版本:(链接: https://pan.baidu.com/s/1hsvL7wS 密码: vg7x)......

easonjim
2017/08/28
0
0
Spring Batch 体系结构

Spring Batch 设计的时候充分考虑了可扩展性和各类终端用户。 下图显示了 Spring Batch 的架构层次示意图,这种架构层次为终端用户开发者提供了很好的扩展性与易用性. 上图显示的是 Spring B...

honeymose
01/13
0
0
Java笔记——看完这个,打通Spring难度系数

写在前面经过一段时间的整理,希望读者看完后对自己的知识点有所帮助。 写过java的都知道:所有的对象都必须创建;或者说:使用对象之前必须先创建。而使用ioc之后,你就可以不再手动创建对象...

简祥
2018/09/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

AWK用法入门详解

AWK用法入门详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将...

linjin200
26分钟前
3
0
Centos7 搭建Gitlab服务器并配置项目全过程

一、在Centos7上安装Gitlab 之前尝试过直接yum安装,但服务器从该yum源下载实在太慢,故手动下载rpm包安装。 1.先安装相关依赖 yum -y install policycoreutils openssh-server openssh-clie...

sjcehui2010
46分钟前
4
0
实现基于JWT的Token登录验证功能

前言 放假之前做了几个小项目+课设,都用到了token实现登录验证和权限判断,然鹅当时和同组的小伙伴也都是第一次接触到了token,于是乎都是一脸懵逼(xjbx)的写完了登录验证的前后端逻辑(我...

鱼煎
46分钟前
3
0
数学表达式计算 MathParser.org-mXparser

背景 在系统中需要计算公式,参数可以配置,类似excel的情况,可以实现数据的计算。 mXparser 实例 public static void main(String[] args) throws InterruptedException { Argume...

翱翔fly
52分钟前
4
0
即将开源 | 2亿用户背后的Flutter应用框架Fish Redux

背景 在闲鱼深度使用 Flutter 开发过程中,我们遇到了业务代码耦合严重,代码可维护性糟糕,如入泥泞。对于闲鱼这样的负责业务场景,我们需要一个统一的应用框架来摆脱当下的开发困境,而这也...

阿里云官方博客
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部