Spring、SpringMVC、MyBatis、SpringBoot

Spring框架的核心就是IOC和AOP :

IOC:

IOC是指控制反转,它是是一种思想,简单理解就是将控制权反转,创建实例交给IOC容器,Spring容器负责控制程序之间的关系。控制权由程序代码转移到了Spring容器中。
Spring 容器在创建被调用者的实例时,会自动将调用者需要的对象实例注入给调用者,这样,调用者通过 Spring 容器获得被调用者实例,这称为依赖注入(DI)。
依赖注入实现方式:setting注入和构造方法注入;

  • 1)属性 setter 注入 指 IoC 容器使用 setter 方法注入被依赖的实例。通过调用无参构造器或无参 static
    工厂方法实例化 bean 后,调用该 bean 的 setter 方法,即可实现基于 setter 的 DI。 2)构造方法注入 指

  • IoC 容器使用构造方法注入被依赖的实例。基于构造器的 DI 通过调用带参数的构造方法实现,每个参数代表一个依赖。

Spring提供了两种IOC容器:

BeanFactory和ApplicationContext:
BeanFactory 就是一个管理 Bean 的工厂,它主要负责初始化各种 Bean,并调用它们的生命周期方法。
创建BeanFactory实例时,需要提供Spring所管理容器的详细配置信息,通过XML文件形式管理;
BeanFactory 和 ApplicationContext 都是通过 XML 配置文件加载 Bean 的。
XML 格式配置文件的根元素是 ,该元素包含了多个 子元素,每一个 子元素定义了一个 Bean,并描述了该 Bean 如何被装配到 Spring 容器中。
在这里插入图片描述

Beans作用域:
在这里插入图片描述
尽管使用 XML 配置文件可以实现 Bean 的装配工作,但如果应用中 Bean 的数量较多,会导致 XML 配置文件过于臃肿,从而给维护和升级带来一定的困难。
在这里插入图片描述

  • ApplicationContext 是 BeanFactory 的子接口,也被称为应用上下文。 它不仅提供了 BeanFactory
    的所有功能,还添加了对 i18n(国际化)、资源访问、事件传播等方面的良好支持。

  • Spring 配置文件支持两种不同的格式,分别是 XML 文件格式和 Properties 文件格式。

AOP:

面向切面编程:它将业务逻辑的各个部分进行隔离,使开发人员在编写业务逻辑时可以专心于核心业务,从而提高了开发效率。其应用主要体现在事务处理、日志管理、权限控制、异常处理等方面。

基于动态代理实现的:

  • 有接口:Proxy
    -去创建一个实例对象;
  • 无接口:Cglib
    生成一个被代理对象的子类来作为代理。

事务管理:
声明式事务:
基于XMl的声明式事务;
基于注解的声明式事务;

  • 1)在 Spring 容器中注册驱动,代码如下所示:
    <tx:annotation-driven transaction-manager=“txManager”/>
  • 2)在需要使用事务的业务类或者方法中添加注解 @Transactional,并配置 @Transactional的参数。关于 @Transactional 的参数如图 1 所示。

SpringMVC:

在这里插入图片描述

SpringMVC执行流程:

  • 1.用户发送请求至前端控制器DispatcherServlet。

  • 2.DispatcherServlet收到请求调用处理器映射器HandlerMapping。

  • 3.处理器映射器根据请求url找到具体的处理器,生成处理器执行链HandlerExecutionChain(包括处理器对象和处理器拦截器)一并返回给DispatcherServlet。

  • 4.DispatcherServlet根据处理器Handler获取处理器适配器HandlerAdapter执行HandlerAdapter处理一系列的操作,如:参数封装,数据格式转换,数据验证等操作。

  • 5.执行处理器Handler(Controller,也叫页面控制器)。

  • 6.Handler执行完成返回ModelAndView。

  • 7.HandlerAdapter将Handler执行结果ModelAndView返回到DispatcherServlet。

  • 8.DispatcherServlet将ModelAndView传给ViewReslover视图解析器。

  • 9.ViewReslover解析后返回具体View。

  • 10.DispatcherServlet对View进行渲染视图(即将模型数据model填充至视图中)。

  • 11.DispatcherServlet响应用户。

(1) 客户端向spring容器发起一个http请求

(2) 发起的请求被前端控制起所拦截(DispatcherServlet),前端控制器会去找恰当的映射处理器来处理这次请求。

(3) 根据处理器映射(Handler Mapping)来选择并决定将请求发送给那一个控制器。

(4) 在控制器中处理所发送的请求,并以modelAndView(属性值和返回的页面)的形式返回给向前端控制器。

(5) 前端控制器通过查询viewResolver对象来试着解决从控制返回的视图。

(6) 如果前端控制找到对应的视图,则将视图返回给客户端,否则抛异常。

springmvc的工作原理

答:
SpringMVC从整体来说分三个部分:
M:model层;
V:view层;
C:controller层。

简单原理:
用户发送一个请求,到C控制器,接受请求,调用业务类,派发页面;
C层交给模型层处理,model返回一个处理结果到C层,
C层交给V层进行视图渲染,
最后响应给客户。
详细原理:
请求
DispatcherServlet:前端控制器(调用)
HanderMapping(解析对应的)
HanderAdapter(调用真正的处理器来处理请求,处理相应的逻辑)(返回)
Model & View(Model:数据对象;View:逻辑上的View)
ViewResolver(视图解析器)(逻辑view—真的的view)
DispatcherServlet(返回的model传给View)
View(返回给请求者)

MyBatis:

缓存:就是将程序或系统经常要调用的对象(临时数据)存在内存中,一遍其使用时可以快速调用,不必再去创建新的重复的实例。这样做可以减少系统的开销,提高效率。
   使用缓存是为了减少和数据库的交互次数,提高执行效率。

适用于缓存的数据:经常查询并且不经常改变的,并且的数据的正确与否对最终结果影响不大的;
不适用于缓存的数据:经常改变的数据,数据的正确与否对最终结果影响很大的。
Mybatis中的一级缓存和二级缓存到底缓存了什么,缓存了以后又有什么效果,缓存的数据什么时候会被清空?
  **一级缓存:**它指的是Mybatis中sqlSession对象的缓存,当我们执行查询以后,查询的结果会同时存入到SqlSession为我们提供的一块区域中,该区域的结构是一个Map,当我们再次查询同样的数据,mybatis会先去sqlsession中查询是否有,的话直接拿出来用,当SqlSession对象消失时,mybatis的一级缓存也就消失了,同时一级缓存是SqlSession范围的缓存,当调用SqlSession的修改、添加、删除、commit(),close等方法时,就会清空一级缓存。
  **二级缓存:**他值得是Mybatis中SqlSessionFactory对象的缓存,由同一个SqlSessionFactory对象创建的SqlSession共享其缓存,但是其中缓存的是数据而不是对象,所以从二级缓存再次查询出得结果的对象与第一次存入的对象是不一样的。
mybatis的的一级缓存是SqlSession级别的缓存,一级缓存缓存的是对象,当SqlSession提交、关闭以及其他的更新数据库的操作发生后,一级缓存就会清空。二级缓存是SqlSessionFactory级别的缓存,同一个SqlSessionFactory产生的SqlSession都共享一个二级缓存,二级缓存中存储的是数据,当命中二级缓存时,通过存储的数据构造对象返回。查询数据的时候,查询的流程是二级缓存>一级缓存>数据库。

二级缓存会有数据不一致的情况,解决办法使用redis来解决:

SpringBoot:

用来简化Spring应用开发,约定大于配置,去繁从简;

自动配置:Spring、SpringMVC最大的问题是得配置大量的参数;
自动配置一些beans:Spring(classpath上可用的框架)查看已存在的应用程序的配置,在此基础上,SpringBoot提供了配置应用程序和框架所需要的基本配置。

自动配置的原理:
在Spring程序的main方法中添加@SpringBootApplication或者@EnableAutoConfiguration会自动去Maven中读取每个starter中的Spring.factories文件,该文件里配置了所有需要被创建Spring容器中的bean;

SpringBoot读取配置文件的方式:
默认为application.properties或者是application.yml;

RequestMapping和GetMapping不同:
RequestMapping具有类属性,可以进行get、post、put或者其他的注释中具有的请求方法;
GetMapping是get请求方法中的一个特例,只是requestMapping的延申,目的是为了提高清晰度。
@Controller和@RestController的区别?
知识点:@RestController注解相当于@ResponseBody + @Controller合在一起的作用。

  1. 如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,或者html,配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。

  2. 如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。
    如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。

SpringBoot的核心注解:

启动类上面的注解是@SpringBootApplication,是SpringBoot的核心注解:
@SpringBootconfiguration:组合了@configuration注解,实现了配置文件的功能;
@EnableAutoconfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项;
@ComponentScan:Spring组件扫描。

优点:
快速创建独立运行的Spring项目与主流框架集成;
使用嵌入式的servlet,应用无需打包成war包;
大量的自动配置,简化开发,也可修改默认值;

SpringBoot Stater:启动器;

Spring、SpringMVC、SpringBoot的区别:

  • Spring最重要的特征就是依赖注入,不是依赖注入就是IOC控制反转;
  • SpringMVC提供了一种分离式的方法来开发web应用,通过运用dispatcherservlet、Moudle&View、ViewResolver等一些简单的盖尼安,开发web应用会变得非常简单。
  • Spring、SpringMVC最大的问题是得配置大量的参数;
  • SpringBoot通过一个自动配置和启动的项目来解决这个问题;

Spring轻量级:

spring给用户提供的服务完全有用户自己决定,spring想用什么服务自己开启使用。但是重量级的都是只要你用就把所有的服务都给你,不能自己定制。
什么是Spring呢,Spring的核心功能是轻量级容器,帮我们管理业务对象,对象的生命周期,以及对象和对象之间的关系,还有轻量级的就是所提供的服务都是允许定制的;他有两个核心组件,就是IOC(控制反转)和AOP(面向切面编程)

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

壮实你最棒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值