1.1、什么是spring

Spring是分层的JavaSE/EE full-stack(一站式) 轻量级开源框架 分层:三层体系结构,为每一个层都提供解决方案 web层:struts2、spring-mvc service层:spring dao层:hibernate(全ORM类型的框架, SQLà HQL,学习成本大)、mybatis(半ORM类型的框架,SQL,学习成本基本不需要)、jdbcTemplate(spring) 轻量级:使用时占用资源少,依赖程序少。比较:EJB(它是第一个为了解决企业级项目开发而产出的一个框架)

1.2、spring由来(发展历程)

1997年IBM提出了EJB(Enterprise JavaBean)的思想1998年,SUM公司制定开发标准规范EJB1.01999年,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的最新版本spring5.0通用版(GA) EJB最初的设计思想考虑的是为分布式的应用服务的,分布式是针对大型应用构造的跨平台的协作计算,EJB最初的目的就是为这种计算服务的。但是软件发展到目前为止,大多数应用不需要采用分布式的解决方案,因此用EJB显得太臃肿了。Spring的出现恰恰为了解决这个问题。举个例子来说,EJB就是导弹,专门设计为打高空飞机。但是现在发现飞机不多。于是将它用来对付步兵,这个实在太糟糕了。这个时候有人发明了狙击步枪(Spring),发现对付步兵太好用了。Spring框架是一个广受欢迎的但是非标准的开源框架。它主要由Interface21公司开发和控制。Spring框架的体系结构是基于注射依赖(DI)模式。Spring框架使用了大量的XML配置文件,它可以独立应用,或者在现有的应用服务器上工作。这两个框架有着一个共同的核心设计理念:它们的目标是为松耦合的POJO类提供中间件服务。框架通过在运行时截取执行环境,或将服务对象注射给POJO类的方式,将应用服务和POJO类“连接”起来。POJO类本身并不关注如何“连接”,而且也很少依赖于框架。这样,开发者可以将注意力集中在业务逻辑上,可以对他们的POJO类进行与框架无关的单元测试。并且,由于POJO类不需要继承框架的类或实现框架提供的接口,开发者可以在更加灵活性的基础上构建继承体系,和搭建应用。

1.3、spring核心

以IoC(Inverse of Control控制反转)和AOP(Aspect Oriented Programming 面向切面编程)为内核。

1.4、spring优点

1.方便解耦,简化开发 (易扩展,易维护,一次编写,到处运行)。

2.Spring就是一个大工厂(SpringIOC容器),可以将所有对象创建和依赖关系维护,交给Spring管理。

3. Spring的依赖注入特性使Bean与Bean之间的依赖关系变的完全透明,降低了耦合度:使用SpringIOC容器,将对象之间的依赖关系交给Spring,降低组件之间的耦合性,让我们更专注于应用逻辑l AOP编程的支持。

4. Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能。

5. 它的面向切面编程特性允许将一些通用任务如安全、事务、日志等进行集中式处理l 声明式事务的支持。

6. 只需要通过配置就可以完成对事务的管理,而无需手动编程, 方便程序的测试。

7. Spring对Junit4支持,可以通过注解方便的测试Spring程序l 方便集成各种优秀框架。

8. Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持l 降低JavaEE API的使用难度• Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低。

1.5、spring体系结构

1.核心容器:

由 spring-beans、spring-core、spring-context 和 spring-expression(Spring Expression Language, SpEL) 4 个模块组成。

1.spring-beans 和 spring-core 模块是 Spring 框架的核心模块,包含了控制反(Inversion of Cotrol, IOC)和依赖注入(Dependency Injection, DI)。

2.spring-context 模块构架于核心模块之上,他扩展了 BeanFactory,为她添加了 Bean 生命周期控制、框架事件体系以及资源加载透明化等功能。此外该模块还提供了许多企业级支持,如邮件访问、远程访问、任务调度等,ApplicationContext 是该模块的核心接口,她是 BeanFactory 的超类,与BeanFactory 不同,ApplicationContext 容器实例化后会自动对所有的单实例 Bean 进行实例化与依赖关系的装配,使之处于待用状态。

3.spring-expression 模块是统一表达式语言(EL)的扩展模块,可以查询、管理运行中的对象,同时也方便的可以调用对象方法、操作数组、集合等。它的语法类似于传统 EL,但提供了额外的功能,最出色的要数函数调用和简单字符串的模板函数。这种语言的特性是基于 Spring 产品的需求而设计,他可以非常方便地同 Spring IOC 进行交互。

2.AOP 和设备支持:

由 spring-aop、spring-aspects 和 spring-instrument 3 个模块组成。

1.spring-aop 是 Spring 的另一个核心模块,是 AOP 主要的实现模块。

2.spring-aspects 模块集成自 AspectJ 框架,主要是为 Spring AOP 提供多种 AOP 实现方法。

3.spring-instrument 模块是基于 JAVA SE 中的"java.lang.instrument"进行设计的,应该算是AOP 的一个支援模块,主要作用是在 JVM 启用时,生成一个代理类,程序员通过代理类在运行时修改类的字节,从而改变一个类的功能,实现 AOP 的功能(使用较少,不必过分关注)。

3.数据访问及集成:

由 spring-jdbc、spring-tx、spring-orm、spring-jms 和 spring-oxm 5 个模块组成。

1.spring-jdbc 模块是 Spring 提供的 JDBC 抽象框架的主要实现模块,用于简化 Spring JDBC。

2.spring-tx 模块是 Spring JDBC 事务控制实现模块。

3.spring-orm 模块是 ORM 框架支持模块,主要集成 Hibernate, Java Persistence API (JPA) 和

Java Data Objects (JDO) 用于资源管理、数据访问对象(DAO)的实现和事务策略。

4.l spring-jms 模块(Java Messaging Service)能够发送和接受信息,自 Spring Framework 4.1以后,他还提供了对 spring-messaging 模块的支撑。

5.spring-oxm 模块主要提供一个抽象层以支撑 OXM(OXM 是 Object-to-XML-Mapping 的缩写,它是一个 O/M-mapper,将 java 对象映射成 XML 数据,或者将 XML 数据映射成 java 对象),例如:JAXB, Castor, XMLBeans, JiBX 和 XStream 等。

4.Web:

由 spring-web、spring-webmvc、spring-websocket 和 spring-webflux 4 个模块组成。

1.spring-web 模块为 Spring 提供了最基础 Web 支持,主要建立于核心容器之上,通过 Servlet 或者 Listeners 来初始化 IOC 容器,也包含一些与 Web 相关的支持。

2.spring-webmvc 模 块 众 所 周 知 是 一 个 的 Web-Servlet 模 块 , 实 现 了 Spring MVC(model-view-Controller)的 Web 应用。

3.spring-websocket 模块主要是与 Web 前端的全双工通讯的协议。(资料缺乏,这是个人理解)。

4.spring-webflux 是一个新的非堵塞函数式 Reactive Web 框架,可以用来建立异步的,非阻塞,事件驱动的服务,并且扩展性非常好。

5.报文发送:

即 spring-messaging 模块。l spring-messaging 是从 Spring4 开始新加入的一个模块,主要职责是为 Spring 框架集成一些基础的报文传送应用。

6.Test:

即 spring-test 模块。spring-test 模块主要为测试提供支持的,毕竟在不需要发布(程序)到你的应用服务器或者连接到其他企业设施的情况下能够执行一些集成测试或者其他测试对于任何企业都是非常重要的。

下一篇:IOC的概念和作用

spring框架:(一) 技术说明(技术介绍,技术优势以及发展史等)的更多相关文章

  1. Spring框架之CGLIB的代理技术(代码了解)

    1.引入CBLIB的开发包 * 如果想使用CGLIB的技术来生成代理对象,那么需要引入CGLIB的开发的jar包,在Spring框架核心包中已经引入了CGLIB的开发包了.所以直接引入Spring核心 ...

  2. Java开发工程师(Web方向) - 04.Spring框架 - 第3章.AOP技术

    第3章--AOP技术 Spring框架 - AOP概述 笔记https://my.oschina.net/hava/blog/758873Spring框架 - AOP使用 笔记https://my.o ...

  3. Spring框架IOC和AOP介绍

    说明:本文部分内容参考其他优秀博客后结合自己实战例子改编如下 Spring框架是个轻量级的Java EE框架.所谓轻量级,是指不依赖于容器就能运行的.Struts.Hibernate也是轻量级的. 轻 ...

  4. Spring框架annotation实现IOC介绍

    Spring学习笔记(三) 续Spring 学习笔记(二)之后,对Spring框架的annotation实现方法进行整理 本文目录 @Autowire 1 @Autowire+@Qualifier t ...

  5. Spring框架各模块功能介绍

    一. Spring是什么? Spring由Rod johnson开发: 是一个非常活跃的开源框架: 它帮助分离项目组件(对象)之间的依赖关系: 它的主要目的是简化企业开发 二. Spring的核心概念 ...

  6. spring框架的一些技术总结

    纵观现在互联网行业,java的地位依然不可动摇,因为java拥有着的众多开发人员和适用性广,技术与解决技术大部分开源等特点,因此java依然是众多众多开发行业作为互联网开发的首选,而说到开发,我们就不 ...

  7. Spring4- 01 - Spring框架简介及官方压缩包目录介绍- Spring IoC 的概念 - Spring hello world环境搭建

    一. Spring 框架简介及官方压缩包目录介绍 主要发明者:Rod Johnson 轮子理论推崇者: 2.1 轮子理论:不用重复发明轮子. 2.2 IT 行业:直接使用写好的代码. Spring 框 ...

  8. 1. Spring 框架简介及官方压缩包目录

    一.Spring 框架简介及官方压缩包目录介绍 1.主要发明者:Rod Johnson 2.轮子理论推崇者:     2.1 轮子理论:不用重复发明轮子.     2.2 IT 行业:直接使用写好的代 ...

  9. Spring框架第一天

    ## 今天课程:Spring框架第一天 ## ---------- **Spring框架的学习路线** 1. Spring第一天:Spring的IOC容器之XML的方式,Spring框架与Web项目整 ...

随机推荐

  1. 如何在 vue 项目里正确地引用 jquery

    转载 2016年11月13日 使用vue-cli构建的vue项目,webpack的配置文件是分散在很多地方的,而我们需要修改的是build/webpack.base.conf.js,修改两处的代码 / ...

  2. SpringBoot整合JPA遇到的问题

    在学习SpringBoot中使用Repository时出现这种错误 或者使用findOne也会报错,只需要改为 应该是SpringBoot版本的原因,fingOne()方法好像已经不用了.

  3. Linux 系统编程 学习:07-基于socket的网络编程2:基于 UDP 的通信

    Linux 系统编程 学习:07-基于socket的网络编程2:基于 UDP 的通信 背景 上一讲我们介绍了网络编程的一些概念.socket的网络编程的有关概念 这一讲我们来看UDP 通信. 知识 U ...

  4. eyou去版权

    公司老板要求做一个自己门户网站,苦于公司自己又没有开发相应的cms内容管理系统,找了一个星期,综合各方面的考虑,决定选择eyoucms来搭建,经过快速安装,来到了简单干净的后台. 现将使用体会记录如下 ...

  5. 致萌新与不会用 NOI Linux 的 OIer

    全文绝大部分转载自:这篇好文章啊. 目录 1:GUIDE 2:Gedit 原文 打开 编译运行 3.Vim 3-1:这东西咋开啊 3-2:这东西咋用啊 4.编译与运行 5.调试 6.CSP竞赛中编写代 ...

  6. CSS换行和省略号

    换行 原地址:https://www.cnblogs.com/meowcool/p/10130103.html //强制不换行 div{ white-space:nowrap; } //自动换行 di ...

  7. JavaMail 发送邮件出现 Connection reset 问题

    问题描述 使用 java mail 发送邮件的时候,申请的 163 邮箱作为发件箱,然无论如何配置,均出现 Connection reset,无法正常发送邮件. Exception in thread ...

  8. 用GitHub Pages搭建博客(七)

    本篇介绍百度统计.百度搜索 一般来讲,部署了一个网站后,我们需要知道网站的浏览量,以便知道网站是否有人访问. 在Jekyll的模板中,由于国外开发者更多,一般的主题默认都开发了谷歌统计(Google ...

  9. css3 @keyframe 抖动/变色动画

    一.纯css实现 .shake{    //抖动的元素    width: 200px;    height: 100px;    margin: 50px auto;    background: ...

  10. yum安装报睡眠错误的解决方法

    可能是系统自动升级正在运行,yum在锁定状态中.可以通过强制关掉yum进程:#rm -f /var/run/yum.pid然后就可以使用yum了.