一.spring是什么?
Spring是一个轻量级的IoC/DI和AOP容器的开源框架
二.spring的优点
1.Spring 能帮我们低侵入/低耦合地根据配置文件创建及组装对象之间的依赖关系   //解耦
2.Spring 面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制等   //提高代码重用性
3.Spring 能非常简单的且强大的声明式事务管理     //使用xml或注解的方法,底层用到动态代理
4.Spring 提供了与第三方数据访问框架(如JPA)无缝集成,且自己也提供了一套JDBC模板来方便数据库访问
5.Spring 提供与第三方Web框架无缝集成,且自己也提供了一套 SpringMVC 框架,来方便 Web 层搭建
三.Spring Ioc/DI
Ioc:
1.控制反转,是一种设计思想,就是原本在程序中需要手动创建对象的权利,交给spring框架管理
2.Ioc容器是实现Ioc的载体,Ioc容器实际上就是个Map(key,value),map中存放各种对象
3.Ioc容器就像一个工厂一样,当我们需要创建一个对象时,只需要配置好配置文件或贴注解即可,
  完全不用考虑对象时如何被创建出来的
4.将对象相互依赖的关系交给ioc容器管理,这样可以很大程度简化应用开发
5.使用Ioc的话,我们只需要配置好,在需要的地方引用就好,这大大的增加了项目的可维护性且降低了开发难度
DI:
1.指 Spring 创建对象的过程中,将对象依赖属性通过配置设值给该对象
2.就是给对象的属性设置属性值
//Ioc创建对象,Di给属性设置值
四.Spring AOP
Aop:面向切面编程
1.能够将那些与业务无关,却为业务模块所共同调用的逻辑和责任封装起来,
  便于减少重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性
2.Spring Aop就是基于动态代理的,当要代理的对象实现了某个接口,就会使用Jdk动态代理
3.如果没有某个接口,就是使用cglib生成一个被代理对象的子类作为代理
//使用aop之后我们可以把一些通用的功能抽象出来,在需要的时候自己使用即可,这样大大的简化了代码量
//常用的aop的有 事务处理  日志管理  权限控制
五.Spring 中的 bean 的作用域
//作用域:在 Spring 容器中是指其创建的 bean 对象相对于其他 bean 对象的请求可见范围
singleton : 唯一bean 实例,Spring 中的 bean 默认都是单例的。
prototype : 多例,每次请求都会创建一个新的 bean 实例,多例只会初始化和销毁,不会存到容器中进行管理
request : 每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效。
session : 每一次HTTP请求都会产生一个新的 bean,该bean仅在当前 HTTP session 内有效。

/*使用总结:在开发中主要使用 scope="singleton"。对于 Struts1 的 Action 使用 request,
          Struts2 中的 Action 使 用 prototype 类型,其他使用 singleton,即不配置
六. SpringMVC工作原理

1、客户端发出http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServlet的请求映射路径(在web.xml中指定),web容器将请求转交给DispatcherServlet.

2、DipatcherServlet接收到这个请求之后将根据请求的信息(包括URL、Http方法、请求报文头和请求参数Cookie等)以及HandlerMapping的配置找到处理请求的处理器Controller(Handler)。

3、DispatclierServlet 根据 HandlerMapping 找到对应的Handler,处理权交给Handler ( Handler将具体的处理进行封装),再由具体的处理适配器 HandlerAdapter对Handler进行具体的调用。

5、Handler对数据处理完成以后将返回一个ModeAndView对象给DispatcherServlet.

6、Handler返回的ModelAndView只是一个逻辑视图并不是一个正式的视图,dspatcherSevlet通过ViewResolver将邀辑视图转化为真正的视图view(这句话简单的就是返回一个要返回的页面的相对路径,通过试图解析器转换成具体那个页面)。

7、DispatcherServlet通过model解析出ModeAndView中的参数进行解析最终展现出完整的view并返回给客户端

//简化
1. 客户端(浏览器)发送请求到dispatcherServlet前端控制器 
2. DispatcherServlet 根据请求信息调用 HandlerMapping ,解析请求对应的 Handler 
3. 解析到对应的 Handler(也就是我们平常说的 Controller 控制器)后,开始由HandlerAdapter 适配器处理
4. HandlerAdapter 会根据 Handler 来调用真正的处理器开处理请求,并处理相应的业务逻辑
5. 处理器处理完业务后,会返回一个 ModelAndView 对象,Model 是返回的数据对象,View 是个逻辑上的 View 
6. ViewResolver 会根据逻辑 View 查找实际的 View 
7. DispaterServlet 把返回的 Model 传给 View (视图渲染)
8. 把 View 返回给请求者(浏览器)
七.Spring 管理事务的方式
1. 编程式事务,在代码中硬编码。(不推荐使用)
2. 声明式事务,在配置文件中配置(推荐使用)
//声明式事务又分为两种:
1. 基于XML的声明式事务
2. 基于注解的声明式事务
八.Spring 框架中用到的设计模式
1.工厂设计模式 : Spring使用工厂模式通过 BeanFactory 、ApplicationContext 创建 bean 对象
2.代理设计模式 : Spring AOP 功能的实现
3.单例设计模式 : Spring 中的 Bean 默认都是单例的
4.模板方法模式 : Spring 中 jdbcTemplate 、hibernateTemplate 等以Template 结尾的对数据库操作类,
               它们就使用到了模板模式
5.包装器设计模式 : 我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库,
                这种模式让我们可以根据客户的需求能够动态切换不同的数据源。
6.观察者模式: Spring 事件驱动模型就是观察者模式很经典的一个应用。
7.适配器模式:Spring AOP的增强或通知(Advice)使用到了适配器模式,spring MVC中也是用到了适配器模式适配 Controller
九.小结
1.spring的核心思想Ioc/DI和aop
2.使用spring不用处理对象之间的依赖关系,能够大大的降低我们代码的耦合度,增加项目的可维护性
3.使用spring我们不用关心对象是怎么创建的,只需要配置好配置文件或贴注解即可,很大程度简化应用开发
4.使用spring能够将与业务无关的代码,,却为业务模块所共同调用的逻辑使用aop将其抽象出来,提高代码可重用性
5.spring提供与第三方web框架无缝集成,并且自己也提供一套SpringMVC框架
使用spring需要配置大量的xml文件,其实也是有点头疼的,但是springboot可以帮我们完美的解决这些问题,我们下一章springboot再见!
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐