Spring Boot和SSH、SSM的区别,最全解释
SSH:Struts + Spring + Hibernate
SSM:Spring + SpringMVC + MyBatis
以下内容摘自
文章1:《ssh架构和springboot spring boot和ssh的区别 》https://blog.51cto.com/u_16213584/10978484
文章2:《spring boot和ssh的区别 spring boot与ssm的区别》https://blog.51cto.com/u_16213667/9223913
一、SSH(Struts + Spring + Hibernate)
基本概念
SSH框架是JAVA EE中三种框架所集成,分别是Struts,Spring,Hibernate框架所组成
集成SSH框架的系统从职责上分为(Struts2–控制;Spring–解耦;Hibernate–操作数据库),以帮助开发人员在短期内搭建结构清晰、可服用好、维护方便的web应用程序。使用Struts作为系统的整体基础框架,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理Struts和Hibernate。
1、Struts2
(1)基本概念
Struts2是一个基于MVC设计模式的web应用框架,相当于一个servlet,在MVC设计模式中,Struts2作为控制器(controller)来建立模型与视图的数据交互。Struts2在Struts1融合webwork。struts2以webwork为核心,采用拦截器的机制来处理用户的请求,这样的设计使得业务逻辑控制器能够与servletAPI完全脱离。
(2)Struts2框架的运行结构
解析:客户端发送请求(HttpServletRequest)到服务器,服务器接收到请求就先进入web.xml配置文件看看有没有配置过滤器,发现有有Struts2的过滤器,然后找到struts.xml配置文件,struts.xml配置文件里定义一个action,然后就去找到action类,此类继承ActionSupport接口,并且实现了execute()方法,返回一个字符串“success”给struts.xml配置文件,struts.xml配置文件的action会默认调用action类的execute()方法,result接收到返回的字符串,result就会调用你指定的jsp页面将结果呈现,最后响应给客户端。
(3)Struts2的优势
- 实现了MVC模式,层次结构清晰,使程序员只需要关注业务逻辑的实现。
- 丰富的标签库,大大提高了开发的效率。
- Struts2提供丰富的拦截器实现。
- 通过配置文件,就可以掌握整个系统各个部分之间的关系。
- 异常处理机制,只需在配置文件中配置异常的映射,即可对异常做响应的处理。
- Struts2的可扩展性高。
- 面向切面编程的思想在Struts2中也有了很好的体现。
- 体现了拦截器的使用,拦截器是一个一个的小功能模块,用户可以将这些拦截器合并成一个大的拦截器,这个合成的拦截器就像单独的拦截器一样,只要将它配置到一个Action中就可以。
(4)Struts2的缺点:
- 校验较繁琐,多字段出错返回不同。
- 安全性太低
- 获取传参时较麻烦
2、Spring
(1)基本概念
Spring是一个开源开发框架,是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。
spring主要用来开发java应用,构建J2EE平台的web应用。其核心就是提供一种新的机制管理业务对象及其依赖关系。
(2)spring的流程图
解析:上面是在Struts结构图的基础上加入了spring流程图,在web.xml配置文件中加入了spring的监听器,在struts.xml配置文件中添加
<constant name="struts.objectFactory" value="spring" />
是告知Struts2运行时使用spring来管理对象,spring在其中主要做的就是注入实例,所有需要类的实例都由spring管理。
(3)spring的优点
- 容器:spring是一个容器,包含并管理对象的生命周期和配置。可以配置每个bean如何被创建,基于一个可配置原型prototype,你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例。
- 支持AOP:spring提供对AOP的支持,它允许将一些通用任务,如安全、事物、日志等进行集中式处理,从而提高了程序的复用性。
- 轻量级框架:spring是轻量级框架,其基本的版本大约2M。
- 控制反转:spring通过控制反转实现松耦合。对象们给他们依赖,而不是对象本身,方便解耦,简化开发。
- 方便程序测试:spring提供了Junit4的支持,可以通过注解方便的测试spring程序。
- 降低java EE API的使用难度:spring对java EE开发中非常难用的一些API(比如JDBC),都提 - 供了封装,使这些API应用难度大大降低。
- 方便集成各种优秀框架:spring内部提供了对各种优秀框架(如Struts、mybatis)的直接支持。
- 支持声明式事务处理:只需要通过配置就可以完成对事务的管理,而无须手动编程。
(4)spring的缺点
- 依赖反射,反射影响进程。
- 太过于依赖设计模式。
- 控制器过于灵活。
- 不支持分布式应用。
3、Hibernate
(1)基本概念
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
(2)hibernate的核心构成和执行流程图
(3)hibernate的优点
- 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
- Hibernate是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作,将软件开发人员从大量相同的数据持久层相关编程工作中解放出来,使开发更对象化了。
- 透明持久化(persistent)带有持久化状态的、具有业务功能的单线程对象,此对象生存期很短。这些对象可能是普通的javabeans/POJO,(POJO概念,plain ordinary java object,简单的java对象,可以简单理解为简单的实体类entity。)这个对象没有实现第三方框架或接口,唯一特殊的是他们正与session关联。一旦这个session被关闭,这些对象就会脱离持久化状态,这样就可被应用程序的任何层自由使用。
- 事务transaction应用程序用来指定原子操作单元范围的对象,它是单线程的,生命周期很短。它通过抽象将应用从底层具体的JDBC、JTA(java transaction API,JTA允许应用程序执行分布式事务处理,在两个或多个网络计算机资源访问并且更新数据,JDBC驱动程序的JTA支持极大地增强了数据访问能力)以及CORBA(公用对象请求代理程序体系结构,common object request broker architecture,简而言之,CORB允许应用程序和其它的应用程序通讯)事务隔离开。某些情况下,一个session之内可能包含多个transaction对象,事务边界的开启与关闭时必不可少的。
- 它没有侵入性,是轻量级框架。
- 移植性好,支持各种数据库,如果换个数据库只要在配置文件中变换配置就可以了,不用改变hibernate代码。
- 缓存机制,提供一级缓存和二级缓存。
一级缓存:
是session级别的缓存,一个session做了一个查询操作,它会把这个操作的结果放到一级缓存中,如果短时间内这个session又做了同一个操作,那么hibernate直接从一级缓存中拿出,而不会去连数据库取数据。
二级缓存:
是sessionFactory级别的缓存,就是查询的时候会把结果缓存到二级缓存中,如果同一个sessionFactory创建的某个session执行了相同的操作,hibernate就会从二级缓存中拿出结果,而不会再去连接数据库。
(4)hibernate的缺点
- 持久层封装过于完整,导致开发人员无法对SQL进行优化,无法灵活应用原生SQL。
- 批量数据处理的时候较为弱势。
- 框架中使用ORM原则,导致配置过于复杂,遇到大项目,维护问题不断。
二、SSM(Spring + SpringMVC + MyBatis)
SSM架构,是三层结合所成的框架,分别是Spring、SpringMVC、MyBatis所组成。Spring依赖注入来管理各层,面向切面编程管理事务,日志和权限。SpringMVC代表了model、view、controller接收外部请求,进行开发和处理。mybatis是基于jdbc的框架,主要用来操作数据库,并且将业务实体和数据表联系起来。
1、Spring
详细介绍见SSH中spring。
2、SpringMVC
(1)基本概念
属于spring框架的一部分,用来简化MVC架构的web应用程序开发。
(2)SpringMVC的优点
- 拥有强大的灵活性,非侵入性和可配置性
- 提供了一个前端控制器dispatcherServlet,开发者无需额外开发控制器对象
- 分工明确,包括控制器、验证器、命令对象、模型对象、处理程序映射视图解析器,每一个功能实现由一个专门的对象负责完成
- 可以自动绑定用户输入,并正确的转换数据类型
- 可重用的业务代码:可以使用现有的业务对象作为命令或表单对象,而不需要去扩展某个特定框架的基类。
(3)SpringMVC的缺点
- servlet API耦合难以脱离容器独立运行
- 太过于细分,开发效率低
3、Mybatis
(1)基本概念
mybatis是一个简化和实现了java数据持久层的开源框架,它抽象了大量的JDBC冗余代码,并提供了一个简单易用的API和数据库交互。
(2)mybatis的优点
- 与JDBC相比,减少了50%以上的代码量。
- mybatis是最简单的持久化框架,小巧并且简单易学。
- mybatis灵活,不会对应用程序或者数据库的限售设计强加任何影响,SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,可重用。
- 提供XML标签,支持编写动态SQL语句(XML中使用if,else)。
- 提供映射标签,支持对象与数据库的ORM字段关系映射(在XML中配置映射关系,也可以使用注解)
(3)mybatis的缺点
- SQL语句的编写工作量较大,对开发人员的SQL语句编写有一定的水平要求。
- SQL语句过于依赖数据库,不能随意更换数据库。
- 拼接复杂SQL语句时不灵活。
最受Java开发者喜好的框架当属Spring,Spring也成为了在Java EE开发中真正意义上的标准,但是随着新技术的发展,脚本语言大行其道的时代(Node JS,Ruby,Groovy,Scala等),Java EE使用Spring逐渐变得笨重起来,大量的XML文件存在与项目中,繁琐的配置,整合第三方框架的配置问题,低下的开发效率和部署效率等等问题。
这些问题在不断的社区反馈下,Spring团队也开发出了相应的框架:Spring Boot。Spring Boot可以说是至少近5年来Spring乃至整个Java社区最有影响力的项目之一
,也被人看作是:Java EE开发的颠覆者!
Spring Boot
是一个全新框架,使用来简化Spring的初始搭建和开发过程,使用了特定的方式来进行配置,让开发人员不在需要定义样板化的配置。此框架不需要配置xml,依赖于像MAVEN这样的构建系统。
三、Spring Boot
官方地址:https://spring.io/projects/spring-boot
Spring Boot 让您可以轻松创建独立的、生产级的基于 Spring 的应用程序,您可以“直接运行”。我们对 Spring 平台和第三方库有自己的看法,因此您可以以最少的麻烦开始使用。大多数 Spring Boot 应用程序只需要最少的 Spring 配置。如果您正在寻找有关特定版本的信息,或有关如何从早期版本升级的说明,请查看我们 wiki 上的项目发行说明部分。
1、Spring Boot基本概念
springboot是一个全新的框架,简化Spring的初始搭建和开发过程,使用了特定的方式来进行配置,让开发人员不再需要定义样板化的配置。此框架不需要配置xml,依赖于maven这样的构建系统。
2、Spring Boot的优点
(1)减少了大量的开发时间并提高了生产力
(2)避免了编写大量的样板代码,注释和XML配置
(3)解决了spring的弊端
(4)代码少了、配置文件少了、不需要对第三方框架烦恼了、项目精简了,对整个团队的开发和维护来说,更大的节约了成本。
3、Spring Boot的缺点
(1)修复bug较慢,报错时难以定位。
(2)集成度较高,不易于了解底层。
4、Spring Boot总结
简单、快速、方便的搭建项目;对主流开发框架的无配置集成;极大提高了开发、部署效率。
5、Spring Boot和Spring的区别
(1)springboot可以建立独立的spring应用程序。
(2)内嵌了如tomcat,Jetty和Undertow这样的容器,也就是说可以直接跑起来,用不着再做部署工作。
(3)无需再像spring那样写一堆繁琐的XML配置文件
(4)可以自动配置spring
(5)提供的POM可以简化maven的配置
6、Spring Boot和SpringMVC的区别
(1)SpringMVC是基于spring的一个MVC框架。
(2)Spring Boot的基于spring的条件注册的一套快速开发整合包。
(3)Spring 是一个“引擎”
参考文章
-
Springboot,SSM及SSH的概念、优点、区别及缺点
-
为什么SSM和SSH框架会逐渐被Spring Boot框架取代?
-
SSH.SSM和springboot框架的优缺点
演示:spring boot与ssm的区别
百度搜 Springboot,SSM框架区别,大多说的都是
1.springboot一个应用是一个可执行jar
2.将原有的xml配置,简化为java配置
他们说的确实没错,可是根本没有说到本质,百度说的这些,其实根本不是这两个框架的区别,SSM框架也可以打包可执行的jar,也可以用注解代替 xml。
首先我们看 springboot 官网里对于 springboot 的描述:
我们可以看到最后一点确实提到了不需要 xml 配置文件,但最重要的是第三点,springboot 提供的 starter 依赖为我们做了很多配置功能。
想知道 starter 依赖为我们做了哪些,我们首先看搭建 SSM 框架时,我们需要哪些步骤
1.加相关的 jar 包
2.配置 web.xml,加载 Spring,SpringMVC
3.配置数据库连接,spring 事务
4.配置加载配置文件的读取,开启注解
5.配置日志文件
6.配置完成,部署 tomcat 调试
做这些步骤,大多都要花一到两天的时间,你可能会疑惑,为什么6个步骤要花这么久,关键在于建这个项目有很多难点,如 包之间的相互依赖,不确定中间有没有冲突,升级版本可能也会导致冲突,bean 配置数据源,事务,切面时,依赖关系搞不清楚,这些都可能让你花费几个小时甚至一天的时间。
下面是我们新建一个 springboot 项目时的步骤,在 idea 里新建项目(在这里我只演示 idea 创建 springboot 项目过程,其他 IDE 创建过程,百度都可以搜到),只需要下面三个步骤,我们就创建好了一个 springboot 项目,里面编写代码,就可以直接运行了。
选择需要的依赖
看完这个,我们就要想,springboot 为何能如此快的创建一个项目呢,难道它不需要配置 bean 吗,难道它不需要引入 jar 包吗。当然,这些都是需要的,它和 SSM 最大的区别就是,这些配置 springboot 都帮我们做好了,我们才可以如此高效的创建一个 springboot 项目。
我们可以看到我们引入的三个依赖,pom.xml 都帮我们加进来了。就是这些 starter 依赖,帮我们做了很多配置。
springboot 框架使用 starter 依赖主要帮我们做了两点:
1.引入相关的 jar
2.自动完成 bean 配置。
至于 starter 如何配置的 bean,怎么解决 bean 之间的冲突,篇幅原因,我们下次再讲。
由此我们才看到 SSM 和 Springboot 的最大区别,所以下次面试官再问你这两者的区别,你可以这样回答:
1.Springboot 将原有的 xml 配置,简化为 java 注解
2.使用 IDE 可以很方便的搭建一个 springboot 项目,选择对应的 maven 依赖,简化Spring应用的初始搭建以及开发过程
3.springboot 有内置的 tomcat 服务器,可以 jar 形式启动一个服务,可以快速部署发布 web 服务
4.springboot 使用 starter 依赖自动完成 bean 配置,,解决 bean 之间的冲突,并引入相关的 jar 包(这一点最重要)
大家还知道什么不同点,或者有什么疑惑的地方,欢迎在评论区补充,我们一起进步!