springMVC的核心是啥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springMVC的核心是啥相关的知识,希望对你有一定的参考价值。

一、 IoC(Inversion of control): 控制反转
1、IoC:
概念:控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系
核心:bean工厂;在Spring中,bean工厂创建的各个实例称作bean
二、AOP(Aspect-Oriented Programming): 面向方面编程
1、 代理的两种方式:
静态代理:
 针对每个具体类分别编写代理类;
 针对一个接口编写一个代理类;
动态代理:
针对一个方面编写一个InvocationHandler,然后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理类
2、 AOP的主要原理:动态代理

Spring工作原理
Spring 已经用过一段时间了,感觉Spring是个很不错的框架。内部最核心的就是IOC了,
动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射
反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置
文件来动态的创建对象,和调用对象里的方法的 。
Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象 进行监督和控制(也就是
在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能。这些都是通过
配置类达到的。
Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明
管理的(Spring根据这些配置 内部通过反射去动态的组装对象)
要记住:Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。
Spring里用的最经典的一个设计模式就是:模板方法模式。(这里我都不介绍了,是一个很常用的设计模式)
Spring里的配置是很多的,很难都记住,但是Spring里的精华也无非就是以上的两点,把以上两点跟理解了
也就基本上掌握了Spring.
参考技术A

Spring MVC是spring的一个web组件,它为构建稳健的web应用提供了丰富的功能。

1、首先用户发送请求>DispatcherS :rvlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;

2、D ispatcherServletHandeM ping HandlerMapping 将会把请求映射为HandlerExecutio
nChain 对象(包含一个Handler 处理器(页面控制器)对象、多个HandlerInterceptor 拦截器象,通过这种策略模式,很容易添加新的映射策略;

3、DispatcherServetHanderdapte HandlerAdapter 将会把处理器包装为适配器,从而支持
多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处器;

4、HandlerAdapter处理器功能处理方法的调用HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法完成功能处理并返回一个ModelAndView 对象( 包含模型数据、逻辑视图名) ;

5、Mode AndVlew 的逻辑视图名VewResover ViewResolver 将把逻辑视图名解析为具体的Vie
w 通过这种策略模式很容易更换其他视图技术;

6、V lew >渲染View 会根据传进来的Model 模型数据进行渲染此处的Model 实际是一个Map
数据结构因此很容易支持其他视图技术远回控制奖会D spatchersery et 三Dispatcherservet 近回鸣应给用户到此一个流程结束。

参考技术B 依赖注入(IoC),又称控制反转。 不用显示的在一个类里用new关键字来生成你想要的对象而只需在xml配置文件里添加相应节点即可,这样就让你整个程序的组成变得灵活多样。

Struts和spring分别是啥?

Struts和spring分别是什么?
二者有什么区别?

通常更多的我们对比 SpringMVC与Struts



把这张图放在这里,我是想说SpringMVC和Struts2真的是不一样的,虽然在都有着核心分发器等相同的功能组件(这些由MVC模式本身决定的)。

 

为什么SpringMVC会赢得最后的胜利呢?谈几点我自己的看法:

 

第一、MVC框架的出现是为了将URL从HTTP的世界中映射到JAVA世界中,这是MVC框架的核心功能。而在URL这一点SpringMVC无疑更加优雅。

 

第二、从设计实现角度来说,我觉得SpringMVC更加清晰。即使我们去对比Struts2的原理图和SpringMVC的类图,它依然很让人困惑,远没有SpringMVC更加直观:


SpringMVC设计思路:将整个处理流程规范化,并把每一个处理步骤分派到不同的组件中进行处理。

这个方案实际上涉及到两个方面:

l 处理流程规范化 —— 将处理流程划分为若干个步骤(任务),并使用一条明确的逻辑主线将所有的步骤串联起来

l 处理流程组件化 —— 将处理流程中的每一个步骤(任务)都定义为接口,并为每个接口赋予不同的实现模式

处理流程规范化是目的,对于处理过程的步骤划分和流程定义则是手段。因而处理流程规范化的首要内容就是考虑一个通用的Servlet响应程序大致应该包含的逻辑步骤:

l 步骤1—— 对Http请求进行初步处理,查找与之对应的Controller处理类(方法)   ——HandlerMapping

l 步骤2—— 调用相应的Controller处理类(方法)完成业务逻辑                    ——HandlerAdapter

l 步骤3—— 对Controller处理类(方法)调用时可能发生的异常进行处理            ——HandlerExceptionResolver

l 步骤4—— 根据Controller处理类(方法)的调用结果,进行Http响应处理       ——ViewResolver


正是这基于组件、接口的设计,支持了SpringMVC的另一个特性:行为的可扩展性。

 

第三、设计原则更加明朗。

    【Open for extension /closed for modification】

这条重要的设计原则被写在了Spring官方的reference中SpringMVC章节的起始段: A key design principle in SpringWeb MVC and in Spring in general is the “Open for extension, closed for modification” principle.

并且重点很好地体现在SpringMVC的实现当中,可以扩展,但却不能改变。我曾经扩展过Spring的IOC、AOP功能,这一点SpringMVC应该和Spring一脉相承。

 

第四、组件化的设计方案和特定的设计原则让SpringMVC形散神聚。

神 —— SpringMVC总是沿着一条固定的逻辑主线运行

形 —— SpringMVC却拥有多种不同的行为模式

SpringMVC是一个基于组件的开发框架,组件的不同实现体系构成了“形”;组件的逻辑串联构成了“神”。因此,“形散神不散”: SpringMVC的逻辑主线始终不变,而行为模式却可以多种多样。

第五、更加贴合Web发展的趋势,这个更加虚了,不再展开说这个 问题了。

 

第六、技术上的放缓导致了程序员对Struts2失去了热情,导致SpringMVC依靠自身的努力和Spring的口碑,逐渐显露了自身的优势和特点。

 

为什么SpringMVC会赢得最后的胜利呢?最后,我们不妨想一想Struts2是怎样流行起来的!

我自己是从Struts1用过来的,后来Struts1的问题很明显了,开源社区出现了很多的MVC框架,最为突出的是Webwork2。


Webwork2探索了一条与传统Servlet模型不同的解决方案,逐渐被大家熟识和理解,不断发展并得到了广大程序员的认可。它以优秀的设计思想和灵活的实现,吸引了大批的Web层开发人员投入它的 怀抱。


Apache社区与Opensymphony宣布未来的Struts项目将与Webwork2项目合并,并联合推出Struts2。


Struts2能够在一个相当长的时间段内占据开发市场主导地位的重要原因在于其技术上的领先优势。而这一技术上的领先优势,突出表现为对Controller的彻底改造:

public class UserController 
    private User user
    public String execute() 
        // 这里加入业务逻辑代码
       return "success";
    

 

从上面的代码中,我们可以看到Webwork2 /Struts2对于Controller最大的改造有两点:

在Controller中彻底杜绝引入HttpServletRequest或者HttpServletResponse这样的原生Servlet对象。


将请求参数和响应数据都从响应方法中剥离到了Controller中的属性变量。

这两大改造被看作是框架的神来之笔。因为通过这一改造,整个Controller类彻底与Web容器解耦,可以方便地进行单元测试。而摆脱了Servlet束缚的Controller,也为整个编程模型赋予了全新的定义。从引入新的编程元素的角度来说,Webwork2 / Struts2无疑也是成功的。因为在传统Servlet模式中的禁地Controller中的属性变量被合理利用了起来作为请求处理过程中的数据部分。这样的改造不仅使得表达式引擎能够得到最大限度的发挥,同时使得整个Controller看起来更像是一个POJO。因而,这种表现形态被笔者冠以的名称 是:POJO实现模式。POJO实现模式是一种具有革命性意义的模式,因为它能够把解耦合这样一个观点发挥到极致。从面向对象的角度来看,POJO模式无疑也是所有程序员所追求的一个目标。这也就是Webwork2 /Struts2那么多年来经久不衰的一个重要原因。


所以,我们看到第一条原因是Struts2依靠技术上的革新赢得了程序员的青睐。但是,这些年来Struts2在技术革新上的作为似乎步子就迈得比较小。我们可以看到,在JDK1.5普及之后,Annotation作为一种新兴的Java语法,逐渐 被大家熟知和应用。这一点上SpringMVC紧跟了时代的潮流,直接用于请求-响应的映射。而Struts2却迟迟无法在单一配置源的问题上形成突破。 当然,这只是技术革新上的一个简单的例子,其他的例子还有很多。

至少给人的感觉是这样的。在这一点上Struts并不是很沾光,因为Spring的口碑和影响力也客观程度上加深了大家对SpirngMVC是技术领导者的印象。

参考技术A Struts介绍:
Struts是采用Java Servlet/JavaServer Pages技术,开发Web应用程序的开放源码的framework。 采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架。
spring介绍:
功能强大的基于javaBeans的配置管理,它使组织应用变得容易和迅速。
两者区别:
Struts是基于Java Servlet和JSP技术。
spring是基于JavaBeans技术。
参考技术B Struts只是一个MVC框架(Framework),用于快速开发Java Web应用。Struts实现的重点在C(Controller),包括ActionServlet/RequestProcessor和我们定制的Action,也为V(View)提供了一系列定制标签(Custom Tag)。但Struts几乎没有涉及M(Model),所以Struts可以采用JAVA实现的任何形式的商业逻辑。
Spring是一个轻型容器(light-weight container),其核心是Bean工厂(Bean Factory),用以构造我们所需要的M(Model)。在此基础之上,Spring提供了AOP(Aspect-Oriented Programming, 面向层面的编程)的实现,用它来提供非管理环境下申明方式的事务、安全等服务;对Bean工厂的扩展ApplicationContext更加方便我们实现J2EE的应用;DAO/ORM的实现方便我们进行数据库的开发;Web MVC和Spring Web提供了Java Web应用的框架或与其他流行的Web框架进行集成。
就是说可将两者一起使用,达到将两者自身的特点进行互补。本回答被提问者采纳

以上是关于springMVC的核心是啥的主要内容,如果未能解决你的问题,请参考以下文章

Struts和spring分别是啥?

Spring与SpringMVC的区别和联系是啥?

Spring与SpringMVC的区别和联系是啥?

spring mvc 是啥

spring mvc的工作流程是啥?

spring mvc的工作流程是啥?