Spring带来的好处

在众多框架中,有一种类型框架,他的特点是建立在现有的原始技术基础上,提供一个与原始技术功能一样,比原始技术更加易用、功能更加强大的框架。它们的优点就是,让开发者不需要关心原始技术上的问题,只关心核心业务上的开发。

SpringMVC就是此类的框架,SpringMVC技术的源头就是Servlet。

Servlet的作用就是接收浏览器发给服务器的请求(request),并将服务端处理完的响应(response)返回给用户的浏览器,浏览器和服务器之间是通过http协议进行沟通的,其过程就是浏览器根据用户的选择将相关信息按照http协议报文的规范组织请求的http报文,这个报文传送到服务器,服务器通过特定的web容器接收这个报文信息,如:tomcat、weblogic等,web容器会对http报文解析,将报文信息封装到request对象,服务端程序使用这个request对象做完相应的处理后,将处理结果封装到response对象里,交给web容器,web容器将response对象内容转变成http协议的响应报文,回传给浏览器,浏览器最后解析这个响应报文,将结果展示给用户。

Servlet我理解的是一个遵循JavaServlet规范的一个java类,运行在支持这个规范的web容器中,servlet也是开发人员实现业务逻辑的地方。javaEE规范的Servlet接口有三个方法:init,service、destroy,进一步细化,还提供了一个HttpServlet类,这个类根据请求类型提供了doGet和doPost等方法。Servlet最大的特点就是根据http协议的特点进行定义,因此做servlet开发时,如果开发者对http协议特点不是特别熟悉,都会碰到或多或少令人迷惑的问题,特别是碰到一些复杂特殊的请求时候:比如文件上传、返回特殊的文件格式到浏览器,还有就是http协议传输都是文本格式,web容器解析后放到request里的也是文本类型,如果碰到货币、数字、日期等类型还需要我们根据实际情况进行转化,如果页面传送的信息非常多,我们不得不做大量的类型转化,这种工作没什么技术含量,体力活还容易导致程序错误,这时候在使用servlet进行开发就不是很方便了。

Servlet还有一个作用就是构造response对象,让请求得到响应。现在浏览器是一个多媒体工具,文字、图片、视频等东西都可以在浏览器里显示,资源不同就导致http响应报文的差别,如果我们使用servlet开发就要根据资源的不同在程序里做相应处理,这就导致程序很难服用,而且如果对某个资源处理的不对,就会导致问题的出现。

而在SpringMVC中,控制器Controller负责处理由DispatcherServlet分发的请求,它把用户请求的数据经过业务处理层处理后封装成一个Model,然后再把该Model返回给对应的View进行展示。在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 和@RequestParam 等一些注解用以定义URL 请求和Controller 方法之间的映射,这样的Controller 就能被外界访问到。此外Controller 不会直接依赖于HttpServletRequest 和HttpServletResponse 等HttpServlet 对象,它们可以通过Controller 的方法参数灵活的获取到。

Spring技术可以说是java企业级开发中重要的组成部分,首先是IOC,IOC本质上就是实例化对象技术,在Java里实例化类是通过new关键字完成的,每次new一个类都会产生一个新的实例对象,这么做似乎很浪费,有时这种浪费还挺危险。在程序开发中我们常常需要一个类永久只产生一个对象,就得使用单例模式,此外还可以通过工厂方式产生对象,那么,使用Spring之后,SpringBean的定义中,scope属性的single可以产生单例对象,prototype产生新对象,bean还可以通过工厂方式产生对象,可以说Spring的bean就是制造对象的工具。

在面向对象的编程里与我们的生活息息相关,比如有个对象的作用是完成打猎的操作,那么打猎这个对象需要两个辅助对象,人和枪,只有人拥有枪才能去打猎。以枪为例,创建枪这个对象似乎不太简单,需要金属、机床、子弹,而机床和子弹又是两个新对象,这些对象一个个互相嵌套相互依赖。如果用java代码构建一个枪的对象,是非常复杂的,假如不是构造枪,构造一个航空母舰,那么构造这个对象的成本之高是让人难以想象的。

怎么消除这种对象相互嵌套互相依赖的关系呢?Spring提供了一种方式,Spring提供了一个容器,我们在配置文件中定义好各个对象的依赖关系,由容器完成对象的创建,当我们需要某个实例的时候就可以去容器里获取,那么构建对象的操作被Spring容器接管,所以它被称为控制反转,控制反转的意思就是把本来由java程序里构建对象的功能交给容器接管,依赖注入就是当程序需要某个对象的时候,容器就把这个对象注入到程序里。在java程序开发中我们想使用某个类的功能,有两种方式,一种是构造一个新的类,新的类继承该类,另一种方式则是将某个类定义在新类里,两个类就建立一种关联关系,Spring的IOC就是实现了这种关联关系,将某各类被赋予到新类的方法有三种:一种是通过构造函数,一种是通过setXXX方式,还有一种是通过注解,这就是所谓的注入方式。

在开发中我们还常常用到一种代理模式,比如有个二号首长,这个二号首长对外代表了具体的实例对象,实例对象的入口和出口都是通过这个二号首长,因为具体的实例对象是一号首长,一号首长是要干大事的,所以一些事务性,重复性的工作例如泡茶,安排车子,这样的工作是不用劳烦一号首长的大驾,而是二号首长帮忙解决的,这就是aop的思想,aop解决程序开发里事务性,和核心业务无关的问题,比如安全、事务、日志等,这些问题对业务场景的实现很有必须要,在实际开发中aop也是节省代码的一种方式。

Spring的作用是被标榜为程序之间的解耦,Spring能降低不同模块之间的耦合度,原因就是在程序开发里不同模块之间信息的沟通是通过对象传递完成的,而对象能否顺利传递就是要合理的构建好对象,而管理好对象的构建方式就能管理好对象传递,这就是Spring给系统架构设计带来的好处。

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值