官方点说:spring是一个分层的一站式的非侵入式的轻量级的开源框架。
而按我的理解去说下spring:
spring可以说是java企业开发里最为重要的技术了。
Spring框架可以管理web层、dao层、业务层(service)、持久层。这体现了spring的分层架构,分层架构允许使用者选择使用某一个组件,同时spring框架的设计更加的模块化,各模块可以独立运行,不会相互牵制。
spring主要有7个模块组成:
spring AOP , orm , core , dao , context , web , web mvc。
而spring的核心是IOC和AOP。其中IOC是通过注入一个实例化的对象来实现解耦的。
传统的呢,调用者需要一个被调用者对象时,会在调用者的内部new一个被调用者,这样使得调用者就依赖于被调用者,耦合度高,如果其中一方做出
改变,就会导致程序出现很大的变动,“牵一发而动全身”,不利于维护和扩展。
那如何办呢,此时我们想到了设计模式中的工厂模式。把创建对象的行为
包装起来,委托给一个工厂,当我们需要改变对象时,只需在在一个地方做出改动便可以了。这种方式在一定程度上降低了耦合度,但是如果类较多的时候,
会需要经常改动工厂中的代码,对工厂产生了依赖,扩展性还是不好。
后来我们采用了IOC设计思想,就是把对象的创建权利交给第三方----spring的IOC容器。
将应用程序转主动为被动,原来的依赖关系就没有了,实现解耦。
AOP呢,也是spring无侵入式特点的体现,AOP是对多个类中的非业务逻辑代码的抽取和封装,比如说一些日志信息,减少系统的重复代码,降低模块之间的耦合度。
spring其中的一个模块是springwebMVC即springMVC,是一个基于MVC的web框架,能与spring无缝整合,M即指的是model模型,
代表的是业务数据和业务逻辑处理(通常指的是web项目中的dao层);V指的是view视图,用来给用户看的且与之交互的界面(web项目中通常以jsp作为view);
C指的是controller控制器,用来接收从视图输入的参数,同时调用model进行业务逻辑处理,将处理好的数据传递给对应的视图来显示给用户看。
springMVC的大致流程:
用户发出请求到控制器(controller),控制器再请求模型(model)进行数据处理,模型将处理后的结果返回给控制器,控制器进行视图渲染,将模型数据数据填充到request域后进行response响应给用户。
而在企业中我们使用的一般是spring+springMVC+mybatis和spring+struts2+mybatis,
这两种组合,那springMVC和struts2的区别在哪呢?springMVC和struts2都是属于MVC框架,前端控制器(dispatchServlet)是这个MVC框架中最为核心的一块,
servlet和filter都可以实现, 而springMVC是用servlet实现的,struts2是用filter实现的,这也导致两者的机制不同。springMVC是方法级别的拦截,一个方法就对应
一个request上下文, 而struts2是类级别的拦截,一个类对应一个request上下文。个人觉得springMVC的开发效率要比struts2高,使用更加的简洁,springMVC处理ajax
请求更是方便, 只需要一个注解@responseBody,然后直接返回响应文本即可。
这是很久之前整理的笔记,思前想后还是发表吧,毕竟这是成长的过程的见证。