javaEE常⽤开源框架的认识及概述
对javaEE框架的认识
⼀、什么是框架
通俗的理解,框架是我们软件开发中的⼀套解决⽅案,不同的框架解决的问题是不同的,⽐如MyBatis框架解决的是持久层的问
题,springMVC框架解决的是表现层的问题。
需要注意的是,框架它本⾝⾃⼰是不能实现业务上的功能,它只能对,⽐如说持久层、表现层、结构合理性等等,提供⼀些解决⽅案,⽽真正的业务层部分,还需要程序员⾃⼰来提供。所以说,框架可以理解为⼀个半成品,我们选⽤这个半成品,然后加上业务需求(即项⽬中的需求)来最终实现整个的功能。
⽽我们使⽤框架的⽬的其实也很简单,就是为了提⾼开发的效率,⽽不⽤关⼼⼀些繁琐的、复杂的底层代码实现,从⽽把更多的精⼒⽤在需求的实现上。
⼆、框架能帮我们解决哪些问题
要明⽩框架能解决哪些问题,⾸先要知道三层架构。
三层架构分为三层:
表现层:是⽤于展⽰数据的;
业务层:是处理业务需求的;
持久层:是和数据库交互的。
从这张图可看出上⾯列出的三个框架和三层架构所处的位置。可以看出MyBatis框架是⼀个持久层框架,springboot aop
它是和数据库交互的;⽽下⾯的Spring框架有点特殊,它不属于任何⼀层;SpringMVC框架是处于表现层的,它是⼀个表现层框架。
从这张图可⼤致得出,不同的框架是各司其职的,它们解决某⼀层或者某⼀类的事情。
三、对⼀些主流框架的认识
由于以下具体的框架都没有学过,所以只能说⼀说,我对这些框架的⼤体认识,可能对于某些框架没⽤使⽤过和对⽐过很难对它的优势有深刻的认识,只能在后续的学习中,深⼊理解。
1、Struts2框架
Struts2框架处于三层架构的表现层,可以⽤来替代掉Servlet技术,来处理前端访问服务器的请求(如表单、页⾯提交过来的请求),所以Struts2是属于⼀个前端处理的框架。
下图显⽰了Struts2框架在三层架构中的位置:
对于web⽇常的⼯作,⽐如获取请求参数、转发、重定向、校验参数等等,使⽤Servlet技术基本都可以完成。既然使⽤Servlet技术基本都可以完成我们的需求,为什么还要使⽤Struts2这个框架呢?原因在于Struts2有其⾃⾝的优势,相⽐使⽤Servlet,Struts2⽤起来更加⽅便,很多事情它⾃动就帮我们做了,⽽且Struts2还具有更加先进的架构和思想。
对于Struts2框架的历史也⾮常有意思,⼤部分框架不同版本之间性质上不会有什么改变,基本是不断修改bug和完善功能,⽽Struts2和它之前的版本Struts1之间的最⼤区别就是技术上没什么关系,这就要从Struts的历史说起。
在早年Struts2还没出来的时候,Struts1特别⽕,⽤得很⼴,但这时候Struts1的作者⾮常苦恼,因为Struts1当时虽然很好⽤,但是它基于的架构和所有的功能构建都是在Servlet之上(这⾥指的不是Servlet技术,⽽是具体的Servlet类),⽽Servlet是线程不安全的,所以导致整个Struts1框架也是处于⼀种线程不安全状态,使得很多的功能⽆法落实,所以Struts1的作者就很苦恼这个问题,他⼀直在研发新的架构。与此同时,另外有⼀个团队也⾮常苦恼,这个团队(也就是WebWork团队)也开发了⼀款前端处理框架,但是他们是后来⼈,他们看到了Struts的缺陷,于是他们开发出来的框架同样也是基于Servlet技术,但它们基于的是Filter(过滤器),这样设计出来的框架会灵活很多,⽽且从架构上来说彻底摆脱了线程安全问题。可是当时满⼤街⽤的都是Struts1框架,WebWork团队⾟⾟苦苦开发出的框架根本没⼈⽤,推⼴不出去。于是,WebWork就想了⼀个办法,到了Struts1的作者想要⼀起合作,Struts的作者看到这个新的框架后,两者⼀拍即合,于是有了Struts2框架。所以Struts2的前⾝就是WebWork,⽽Struts1和Struts2两者基本是两个不同的框架,当然后来Struts1的作者也把⾃⼰之前想要在Struts1中实现的想法带⼊到了Struts2中来,所以现在的Struts2框架是⼀个强强联⼿的框架,整合了Struts1和WebWork的优点。
2、SpringMVC
要了解SpringMVC,⾸先来看看MVC模型,对于表现层的框架⼀般都会采⽤MVC这种设计模型去做架构,MVC即:
M  model 模型:实际上就是java中JavaBean的⼀个对象,⽤来封装数据;
V  View 视图:其中指的是jsp技术或者HTML这种技术,⽤来显⽰;
C  Controller 控制器:指的是像Servlet这种技术,能⽤来接收请求。
MVC这种设计模型的意思就是,发请求,请求先到达控制器(Controller),控制器接收请求,请求接收到之后,再⽤⼀个
JavaBean(model)把拿到的数据封装起来,根据这个JavaBean中封装的数据就可以调⽤业务层进⾏业务处理,业务层如果再访问持久层的数据,也可以再把数据封装到JavaBean当中,最终可以把程序转发到jsp(view),jsp显⽰结果⽣成HTML响应给⽤户,这就是整个⼀个MVC模型,分⼯⾮常明确。
SpringMVC框架也是⼀个处于表现层的框架,是采⽤MVC模型来设计的,所以它能够接受请求,拿到请求参数,并进⾏数据的封装,还可以转发到jsp显⽰对应的数据。同时,它也是⼀个轻量级的web框
架,它属于Spring FrameWork的⼀个后续产品,已经融合在Spring Web Flow中。做web开发可以选择SpringMVC这个框架,也可以选择别的框架(⽐如Struts2),因为最终Spring都可以帮你集成。但使⽤SpringMVC更有好处,因为SpringMVC属于Spring的⼀部分,SpringMVC和Spring的整合相⽐别的框架更加容易。
SpringMVC⽬前已经成为最主流的框架之⼀,并且随着Spring3.0的发布,已经全⾯超越Struts2,成为最优秀的MVC框架。
它通过⼀套注解,让⼀个简单的Java类成为处理请求的控制器,⽽⽆须实现任何接⼝,⽽如果我们使⽤Servlet,必须继承HttpServlet或者实现Servlet接⼝。同时它还⽀持RESTful编程风格的请求。
3、Hibernate框架和Mybatis
Hibernate框架是⼀个全⾃动的、完全⾯向对象的持久层框架,代替了以往的DButils帮助我们完成数据库操作。
下图显⽰了Struts2框架在三层架构中的位置:
使⽤Hibernate框架的好处:能够使我们操作数据库时,可以⽤⾯向对象的⽅式来完成,⽽不需要写SQL语句。
Hibernate是⼀款orm框架,orm(Object Relational Mapping,)即对象关系映射,在hibernate中体现为使⽤⼀个配置⽂件来配置表,即对象与数据中表之间的映射关系,其中对象名对应⼀个表名,对象属性对应表中的某⼀列。
相对于Hibernate,Mybatis框架是⼀个半⾃动化的持久层框架,同样也是⽤于完成数据库操作。相⽐hibernate框架,两者有相同点也有不同点,hibernate框架sql语句已经被封装,直接可以使⽤,⽽mybatis 属于半⾃动化,sql需要⼿⼯完成,稍微繁琐,但可以避免不需要的查询,提⾼系统性能。同时Mybatis通过⼿动写SQL语句,也更容易维护。
在开发⼯程中,Hibernate框架⽆需过多关注底层实现,只要去管理对象即可,⽽Mybatis需要⾃⾏管理映射关系。
总结起来,Mybatis相⽐于Hibernate,更加的⼩巧、简单,某些操作需要我们⾃⼰完成。
3、Spring框架
Spring是分层的Java SE/EE应⽤full-stack(全栈式)轻量级开源框架,以IOC(Inverse Of Control 反转控制)和AOP(Aspect Oriented Programming ⾯向切⾯编程)为内核,提供了表现层MVC和持久层Spring JDBC以及业务层事务管理等众多的企业级应⽤技术,还能整合众多著名的开源第三⽅框架和类库,逐渐成为使⽤最多的JavaEE企业应⽤开源框架。
从这张图可看出,Spring不属于任何⼀层,它横跨了三层架构,它是⼀个以IOC和AOP为核⼼的容器框架,能管理应⽤对象的⽣命周期。我们之前创建对象⼀般都要通过new + 构造⽅法,⽽且每new⼀次就要开辟⼀块内存空间,这样如果项⽬中使⽤了1000个对象,就需要开辟1000块内存空间,⽽在某段时间中我们可能并不同时需要这1000个对象,这样就造成了资源的浪费,如果使⽤Spring这个容器,它就会⾃动帮我们管理这些对象的⽣命周期,就像tomacat容器帮我们管理Servlet的⽣命周期⼀样。
对AOP的简单理解:之前我们⼀直学的是OOP(⾯向对象编程),因为OOP存在某些缺陷,所以有了AOP(⾯向切⾯编程)去对OOP进⾏补充,所以AOP和OOP之间的关系不是包含关系,⽽是AOP是对OOP的补充。
Spring优点还在于组件化,Spring中的组件指的就是Spring所管理的对象。⼀个项⽬对我们来说,可以理解为由各个类产⽣对象,由对象调⽤⽅法,最终实现功能。⽽Spring可以把项⽬中⽤到的类进⾏管理,把这些对象称为组件,项⽬的实现由各个对象相互调⽤⽅法就可以变成组件之间的相互调⽤,这样项⽬就被组件化了。组件化的好处在于,组件与组件之间是没有关系的,这样就降低了程序之间的耦合。
Spring各个模块结构:
4、SpringBoot框架
SpringBoot框架是基于Spring框架的,所以SpringBoot本质还是Spring框架,它的出现是替代Spring中的缺点的,SpringBoot是对Spring 的进⼀步封装,所以Spring能做的SpringBoot都能做,⽽且SpringBoot更加好⽤。
对Spring存在的缺点的简单理解:⾸先使⽤Spring框架,需要进⾏的配置是⼗分繁琐的,⽽且有些配置不论谁使⽤都是⼀样的,所以没有必要每次都配置;其次,项⽬的依赖管理也是⼀件耗时耗⼒的事情,在环境搭建时,需要分析导⼊库以及相关联库的坐标,⼀旦选错了依赖的版本,可能就会带来不兼容的问题。
⽽SpringBoot对上述的Spring存在的问题都提出了解决⽅案。它基于约定优于配置的思想,对于某些固定的配置⾃动就帮你配好了,让开发⼈员把更多的精⼒放在业务逻辑的处理上;⽽SpringBoot⽤起步依赖的⽅式,把具备某些功能的坐标打包到⼀起,⽅便导⼊,并提供了⼀些默认的功能。
综上,SpringBoot框架可以理解为对Spring的⼀种完善,它不是对Spring功能上的增强,⽽是提供了⼀种快速使⽤Spring的⽅式。
四、总结
对于java web开发框架,开始是SSH(Struts、Spring、Hibernate)较为流⾏,后来升级为Struts2,到后来Struts2渐渐被SpringMVC替换掉,变成了Spring + SpringMVC + Hibernate/ibatis架构。
之后Hibernate配置维护需要的⼈⼒成本⼤⽽慢慢被ibatis代替,后来MyBatis出现了,从iBatis到MyBatis,MyBatis提供了更为强⼤的功能,同时并没有损失其易⽤性,就变成为了Spring+SpringMVC+Mybatis,这是很多公司⽐较流⾏的框架。
⽬前,随着SpringBoot的流⾏,开始向SpringBoot+Mybatis架构转变,同时基于SpringBoot的SpringCloud微服务框架开始成为前沿框架。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。