Spring(IOC、AOP)、SpringMVC

Spring的优点:

  1. Spring属于低侵入式设计,代码的污染极低;
  2. Spring的高度开放性,并不强制应用完全依赖于Spring,开发者可以自由选择Spring的部分或全部;
  3. 降低了组件之间的耦合性 ,实现了软件各层之间的解耦(高内聚低耦合);
  4. 可以使用容易提供的众多服务,如事务管理,消息服务等,通过配置即可,无需手动编程;
  5. 降低JavaEE API的使用难度;
  6. Spring的DI机制降低了业务对象替换的复杂性;
  7. Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付;
  8. Spring对于主流的应用框架提供了集成支持,如Hibernate,JPA,Struts等;
  9. 方便程序的测试,Spring对Junit4支持,可以通过注解方便的测试Spring程序;
  10. 独立于各种应用服务器;
  11. Java 源码是经典学习范例;

 

Spring的缺点:

  1. jsp中要写很多代码、控制器过于灵活,缺少一个公用控制器;
  2. Spring不支持分布式,这也是EJB仍然在用的原因之一;

 

Spring的两大核心:IOC、AOP

     IOC:

控制反转(Inversion of Control)和依赖注入(Dependecy Injection)是同一个概念。具体的讲:当某个角色需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者因此也称为依赖注入。

在我们开发的过程中,在不同的类里一般需要实例化出各种各样的对象,也就是一个类里面会引用其他类的实例。最简单的做法:需要就new 一个,这样一来,我们一个项目做完,发现导出都是在new 对象,这样就造成了代码的紧耦合度,这与我们面向对象的可扩展,可维护,可重用的思想是严重不符的。所谓的“控制”,就是当我们需要一个对象的时候,就自己去New一个,自己来控制对象的生死。当我们项目中使用了Spring以后,一个项目做完了,细心的同学就会发现,项目里面 New出现的频率明显降低了,取而代之的是一个一个的配置文件:Spring2.5以前,我们配置的是一个一个Bean定义。配置起来是比较繁琐,需要配置定义很多个Bean,但是我们的确不用在项目里面直接去New了,这里我们需要的对象,由Spring自己去生产,所有定义的对象都有Spring来管理,需要的时候给你!这里 ,也就是 “对象的管理权限被反转给了Spring了”    ,好在有了Java的注解以后,使用注解可以大大减轻XML里面的Bean的定义,利用注解已经比较简单的实现了Bean的装配。

Spring实现IOC(控制反转)的三种方式原(作者:旧城以西林)

     AOP:

面向切面编程(AOP)完善Spring的依赖注入(DI),面向切面编程在spring中主要表现为两个方面:
              1.面向切面编程提供声明式事务管理 
              2.Spring支持用户自定义的切面 

面向切面编程(AOP)是对面向对象编程(OOP)的补充,面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。AOP从程序运行角度考虑程序的结构,提取业务处理过程的切面,oop是静态的抽象,aop是动态的抽象,是对应用执行过程中的步骤进行抽象,,从而获得步骤之间的逻辑划分。 

面向切面编程(AOP)是纵向的编程。比如业务A和业务B现在需要一个相同的操作,传统方法我们可能需要在A、B中都加入相关操作代码,而应用AOP就可以只写一遍代码,A、B共用这段代码。并且,当A、B需要增加新的操作时,可以在不改动原代码的情况下,灵活添加新的业务逻辑实现。在实际开发中,比如商品查询、促销查询等业务,都需要记录日志、异常处理等操作,AOP把所有共用代码都剥离出来,单独放置到某个类中进行集中管理,在具体运行时,由容器进行动态织入这些公共代码。

AOP主要一般应用于签名验签、参数校验、日志记录、事务控制、权限控制、性能统计、异常处理等。

 

SpringMVC 和Spring 的关系:

SpringMVC 是控制层,用来接收前台传值,调用service层和持久层,返回数据再通过SpringMVC把数据返回前台。SpringMVC的核心控制器是DispatcherServlet,是根据方法参数来接收数据的,使用简单,且请求路径根据注解和视图解析器确定。

Spring主要的作用是黏合其他模块组件,进行统一管理,springmvc则主要是负责web端。使用Spring框架可以很好的将控制层和持久层耦合在一起,并降低各个模块之间的耦合性,并且Spring可以控制事务等。

名字上就可以窥探出,Spring>SpringMVC,那么事实上,spring和SpringMVC是一种父子关系。SpringMVC是Spring扩展出的一个应用于web端的框架。在这里需要注意的一点,就是到底什么是父子容器关系:
Spring主要的作用是黏合其他模块组件,进行统一管理,SpringMVC 则主要是负责web端。那么,我们都知道,我们在应用Spring的时候,可以使用注入。这个时候,如果我们的web端是用的SpringMVC,这个时候,Controller理论上是通过SpringMVC去注入,但是,使用Spring注入,同样是可行的。同理,Service等层,使用SpringMVC配置的统一扫描装配也是可以的。所以,如果说只是为了使用Spring的依赖注入,是大可不必将SpringMVC和Spring同时使用的。他们完全可以分开!但是,尽管SpringMVC和Spring都可以进行自动装配扫描,值得注意的是:Spring(父容器)并不能直接访问SpringMVC(子容器)所注入的对象,但是SpringMVC却可以访问到spring装载的对象。所以,在配置自动装配的时候,应该注意到这一点。

 

SpringMVC执行流程:

  1. 用户发送请求至前端控制器(DispatcherServlet);
  2. 前端控制器(DispatcherServlet)收到请求,调用处理器映射器(HandlerMapping)查找 Handler(可以根据xml配置、注解进行查找)生成处理器对象及处理器拦截器(如果有则生成),并返回给前端控制器(DiserServlet);
  3. 前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)找到具体的Controller执行Handler,并返回给前端控制(DispatcherServlet)一个ModelAndView;
  4. 前端控制器(DispatcherServlet)请求视图解析器去进行视图解析,返回一个View;
  5. 前端控制器(DispatcherServlet)对View进行视图渲染
  6. 前端控制器(DispatcherServlet)向用户xiang响应结果;

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值