一:Spring是什么

  Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架它以IOC控制反转和AOP面向切面编程为核心,提供了展现层 Spring MVC 和持久层 Spring JDBC 以及业务层事务管理等众多的企业级应用技术;还有个强大之处就是可以整合众多的第三方开源框架和类库,所以逐渐成为使用最多的 Java EE 企业级应用的开源框架。

full-stack:

  full-stack 的设计,意味着各层能够无缝的集成在一起,遵循的DRY原则(don't repeat yourself),将各层共用的东西,抽取出来,并通过自顶向下的设计,无缝的集成在一起,粘合在一起,达到更高层次、更粗粒度的重用,同时为了保证灵活的可扩展性,在更高、更粗的粒度上遵守开放-封闭的原则,在各层的各个关键点,要提供诸多的钩子,回调的接口,供使用者扩展。full-stack的设计,在层与层之间,并不一味的追求松散的机制,而是相反,在层与层之间增强一定的内聚性,粘合力,以此来达到粗粒度的封装与重用。full-stack 的设计,其爆发出的威力是巨大的,相对普通的单一层面的设计,在开发效率上不是一个层次上的,基于28原理的设计,可以满足80的调用者直接开发,19%的调用者,通过扩展点进行扩展来满足需求,对于1%钻角尖的需求,自己去造轮子。Spring就是使用这样的设计,我们设计如果以它们为中心,生产力可以极大提高

IOC(Inversion of Control):

  IOC是控制反转,它不是一种技术,而是一种设计思想,IOC将你设计好的对象交给容器管理,而不是再内部直接创建出来

AOP(Aspect Orient Programming):

  AOP是面向切面编程,可以说面向对象编程OOP是从静态角度考虑程序结构,而面向切面编程AOP是从动态角度考虑程序运行结果

二:Spring起源

1997 年 IBM 提出了 EJB 的思想
1998 年,SUN 制定开发标准规范 EJB1.0
1999 年,EJB1.1 发布
2001 年,EJB2.0 发布
2003 年,EJB2.1 发布
2006 年,EJB3.0 发布
Rod Johnson(spring 之父)
  Expert One-to-One J2EE Design and Development(2002)
  阐述了 J2EE 使用 EJB 开发设计的优点及解决方案
  Expert One-to-One J2EE Development without EJB(2004)
  阐述了 J2EE 开发不使用 EJB 的解决方式(Spring 雏形)
 
2017 年 9 月份发布了 spring 的最新版本 spring 5.0 通用版(GA)

  在最初的EJB 1 时代(EJB 简单来说就是把已经编写好的程序/类打包放在服务器上执行),可谓说是一个”黑暗“时代,正好也是一个J2EE规范统治的时代,基于各种容器和 J2EE 规范的软件解决方案是唯一的“正道”,沉重的研发模式和生态让那个时代的开发者痛苦不堪。可是随着经典巨著《Expert One-on-One J2EE Design and Development》的诞生,重规范时代终于迎来了一线曙光,该书的作者 Rod Johnson 在书中阐述了轻量级框架的研发理念,对原有笨重的规范进行了抨击,并基于书中的理念推出了最初版的 Spring 框架,Spring框架即以interface21框架为基础,经过重新设计,并不断丰富其内涵,于2004年3月24日,发布了1.0正式版。同年他又推出了一部堪称经典的力作《Expert one-on-one J2EE Development without EJB》,该书在Java世界掀起了轩然大波,不断改变着Java开发者程序设计和开发的思考方式。所以延续至今已达 10 多年之久

三:Spring的优势特点

1:方便解耦,简化开发(IOC)

  Spring内部提供IOC容器,可以将对象间的依赖关系交由Spring进行控制,避免类与类之间的过度依赖而产生程序耦合。用户不必再编写单例模式类、属性文件解析等底层的代码需求,Spring IOC可以让我们可以更专注与上层业务逻辑代码

2:AOP 编程的支持

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

3:声明式事务的支持

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

4:方便程序的测试

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

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

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

6:降低 JavaEE API 的使用难度

  Spring 对 JavaEE API(如 JDBC、JavaMail、远程调用等)进行了薄薄的封装层,使这些 API 的使用难度大为降低。

7:Java 源码是经典学习范例

  Spring 的源代码设计精妙、结构清晰、匠心独用,处处体现着大师对 Java 设计模式灵活运用以及对 Java 技术的高深造诣。它的源代码无意是 Java 技术的最佳实践的范例。

四:Spring体系结构

  上图是 Spring 框架的所有模块,这些模块可以满足一切企业级应用开发的需求,在开发过程中可以根据需求有选择性地使用所需要的模块。下面分别对这些模块的作用进行简单介绍。

1. Data Access/Integration(数据访问/集成)

数据访问/集成层包括 JDBC、ORM、OXM、JMS 和 Transactions 模块

①:JDBC 模块:
提供了一个 JDBC 的抽象层,大幅度减少了在开发过程中对数据库操作的编码。
②:ORM 模块:
对流行的对象关系映射 API,包括 JPA、JDO、Hibernate 和 iBatis 提供了的集成层。
③:OXM 模块:
提供了一个支持对象/XML 映射的抽象层实现,如 JAXB、Castor、XMLBeans、JiBX 和 XStream。
④:JMS 模块:
指 Java 消息服务,包含的功能为生产和消费的信息。
⑤:Transactions 事务模块:
支持编程和声明式事务管理实现特殊接口类,并为所有的 POJO。

2:Web模块

Spring 的 Web 层包括 Web、Servlet、Struts 和 Portlet 组件

①:Web 模块:
提供了基本的 Web 开发集成特性,例如多文件上传功能、使用的 Servlet 监听器的 IoC 容器初始化以及 Web 应用上下文。
②:Servlet模块:
包括 Spring 模型—视图—控制器(MVC)实现 Web 应用程序。
③:Struts 模块:
包含支持类内的 Spring 应用程序,集成了经典的 Struts Web 层。
④:Portlet 模块:
提供了在 Portlet 环境中使用 MV C实现,类似 Web-Servlet 模块的功能。

3:Core Container(核心容器)

Spring 的核心容器是其他模块建立的基础,由 Beans 模块、Core 核心模块、Context 上下文模块和 Expression Language 表达式语言模块组成

①:Beans 模块:
提供了 BeanFactory,是工厂模式的经典实现,Spring 将管理对象称为 Bean。
②:Core 核心模块:
提供了 Spring 框架的基本组成部分,包括 IoC 和 DI 功能。
③:Context 上下文模块:
建立在核心和 Beans 模块的基础之上,它是访问定义和配置任何对象的媒介。ApplicationContext 接口是上下文模块的焦点。
④:Expression Language 模块:
是运行时查询和操作对象图的强大的表达式语言。

4:其它模块

Spring的其他模块还有 AOP、Aspects、Instrumentation 以及 Test 模块

①:AOP 模块:
提供了面向切面编程实现,允许定义方法拦截器和切入点,将代码按照功能进行分离,以降低耦合性。
②:Aspects 模块:
提供与 AspectJ 的集成,是一个功能强大且成熟的面向切面编程(AOP)框架。
③:Instrumentation 模块:
提供了类工具的支持和类加载器的实现,可以在特定的应用服务器中使用。
④:Test 模块:
支持 Spring 组件,使用 JUnit 或 TestNG 框架的测试。

.

Spring基本介绍的更多相关文章

  1. Spring Batch 中文参考文档 V3.0.6 - 1 Spring Batch介绍

    1 Spring Batch介绍 企业领域中许多应用系统需要采用批处理的方式在特定环境中运行业务操作任务.这种业务作业包括自动化,大量信息的复杂操作,他们不需要人工干预,并能高效运行.这些典型作业包括 ...

  2. [翻译]Spring框架参考文档(V4.3.3)-第二章Spring框架介绍 2.1 2.2 翻译--2.3待继续

    英文链接:http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/overview.ht ...

  3. Spring 的介绍和目标

    1. Spring介绍 打开Spring 官网查看对 Spring 的介绍和目标 http://www.springsource.org/about We believe that: · J2EE s ...

  4. Spring的介绍与搭建

    一.Spring的介绍 二.Spring的搭建 (1)导包 (2)创建一个对象 (3)书写配置注册对象到容器 (4)代码测试

  5. Spring Shell介绍

    最近开发中在下遇到了spring-shell开发工具的项目,现在整理了相关文章,以供大家学习 本博客相关的文章均是在Spring Shell 1.2.0的基础上建立   Spring Shell介绍 ...

  6. Spring DevTools 介绍

    Spring DevTools 介绍 Spring Boot包括一组额外的工具,可以使应用程序开发体验更加愉快. spring-boot-devtools模块可以包含在任何项目中,它可以节省大量的时间 ...

  7. 第1章—Spring之旅—Spring模块介绍

    Spring模块介绍 Spring7大核心模块: 核心容器(Spring Core) 核心容器提供Spring框架的基本功能.Spring以bean的方式组织和管理Java应用中的各个组件及其关系.S ...

  8. Spring Security 介绍与Demo

    一.Spring Security 介绍 Spring Security 是针对Spring项目的安全框架,也是Spring Boot底层安全模块的默认技术选型.我们仅需引入spring-boot-s ...

  9. [转帖]微服务框架Spring Cloud介绍 Part1: 使用事件和消息队列实现分布式事务

    微服务框架Spring Cloud介绍 Part1: 使用事件和消息队列实现分布式事务 http://skaka.me/blog/2016/04/21/springcloud1/ APR 21ST,  ...

  10. Spring 框架介绍

    Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of Control – I ...

随机推荐

  1. java ->包的声明与访问

    包的声明与访问 包的概念 java的包,其实就是我们电脑系统中的文件夹,包里存放的是类文件. 当类文件很多的时候,通常我们会采用多个包进行存放管理他们,这种方式称为分包管理. 在项目中,我们将相同功能 ...

  2. spark机器学习从0到1基本数据类型之(二)

        MLlib支持存储在单个机器上的局部向量和矩阵,以及由一个或多个RDD支持的分布式矩阵. 局部向量和局部矩阵是用作公共接口的简单数据模型. 底层线性代数操作由Breeze提供. 在监督学习中使 ...

  3. Django操作cookie实例

     cookie项目文件: templates模板: login.html {% load static %} <!DOCTYPE html> <html lang="en& ...

  4. Solr-常见问题汇总(持续更新)

    本文主要记录solr使用中遇到的一些常见问题及命令 关于solrConfig.xml的配置博客:https://blog.csdn.net/yuh_LLllccy/article/details/88 ...

  5. Hbase javaAPI报错:Callexception,tries=10,retries=35,started=38465msago

    [client.RpcRetryingCaller(142)]Callexception,tries=10,retries=35,started=38465msago,cancelled=false, ...

  6. 点击劫持ClickJacking

    原文:https://beenle-xiaojie.github.io/2019/01/07/ClickJacking/ 引言 当我们的页面嵌入到一个iframe中时,安全测试提出一个于我而言很新鲜的 ...

  7. 安卓网络编程学习(1)——java原生网络编程(2)

    写在前面 该博客紧接上篇博客:https://www.cnblogs.com/wushenjiang/p/12937531.html,继续学习post请求,带参数的post和get请求以及文件上传与下 ...

  8. SecureCRT VBscript关闭Flow Control CTS

    crt.Session.Connect "/Serial COM2 /BAUD 38400 /NOCTS" 更多命令行参数可查看SecureCRT-Help-Help Topics ...

  9. Sping源码+Redis+Nginx+MySQL等七篇实战技术文档,阿里大佬推荐

    JVM JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的. 引入 ...

  10. bypass disable_function的方法及蚁剑插件bypass-php-function使用

    bypass disable_function的方法及蚁剑插件bypass-php-function使用 在学习php时,发现有许多函数会对网站或系统造成很大危险隐患,常见的危险函数有: phpinf ...