Spring MVC

目录

1. Spring MVC 执行流程(工作原理)

2.Spring中设计模式

3. Mybatis 中一级缓存与二级缓存?(2017-12-4-lyq)

4.Java反射模式


1. Spring MVC 执行流程(工作原理)

答:1.用户发送请求至前端控制器 DispatcherServlet

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

3.处理器映射器根据请求 url 找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet

4.DispatcherServlet 通过 HandlerAdapter 处理器适配器调用处理器

5.执行处理器(Controller,也叫后端控制器)

6.Controller 执行完成返回 ModelAndView

7.HandlerAdapter 将 controller 执行结果 ModelAndView 返回给 DispatcherServlet

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

9.ViewReslover 解析后返回具体 View

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

2.Spring中设计模式

https://www.cnblogs.com/jifeng/p/7398852.html

第一种:简单工厂

又叫做静态工厂方法(StaticFactory Method)模式,但不属于 23 GOF 设计模式之一。

简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。

spring 中的 BeanFactory 就是简单工厂模式的体现,根据传入一个唯一的标识来获得 bean 对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定。如下配置,就是在 HelloItxxz 类中创建一个 itxxzBean

第二种:单例模式(Singleton

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

spring 中的单例模式完成了后半句话,即提供了全局的访问点 BeanFactory。但没有从构造器级别去控制单例,这是因为 spring 管理的是是任意的 java 对象。

核心提示点:Spring 下默认的 bean 均为 singleton,可以通过 singleton=“true|false” 或者 scope=“来指定

第三种:适配器(Adapter

在 Spring Aop 中,使用的 Advice(通知)来增强被代理类的功能。Spring 实现这一 AOP 功能的原理就使用代理模式(1JDK 动态代理。2CGLib 字节码生成技术代理。)对类进行方法级别的切面增强,即,生成被代理类的代理类, 并在代理类的方法前,设置拦截器,通过执行拦截器重的内容增强了代理方法的功能,实现的面向切面编程。

第四种:代理(Proxy

为其他对象提供一种代理以控制对这个对象的访问。 从结构上来看和 Decorator 模式类似,但 Proxy 是控制,更像是一种对功能的限制,而 Decorator 是增加职责。spring Proxy 模式在 aop 中有体现,比如 JdkDynamicAopProxy Cglib2AopProxy

第五种:观察者(Observer

定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

spring 中 Observer 模式常用的地方是 listener 的实现。如 ApplicationListener

第六种:策略(Strategy

定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。

spring 中在实例化对象的时候用到 Strategy 模式

在 SimpleInstantiationStrategy 中有如下代码说明了策略模式的使用情况:

第七种:模板方法(Template Method

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method 使得子类可以不改变一个算法的结构即可重定义该算 法的某些特定步骤。

Template Method 模式一般是需要继承的。这里想要探讨另一种对 Template Method 的理解。spring 中的 JdbcTemplate,在用这 个类时并不想去继承这个类,因为这个类的方法太多,但是我们还是想用到JdbcTemplate 已有的稳定的、公用的数据库连接,那么我们怎么办呢?我们可以把变化的东西抽出来作为一个参数传入 JdbcTemplate 的方法中。但是变化的东西是一段代码,而且这段代码会用到 JdbcTemplate 中的变量。怎么办?那我们就用回调对象吧。在这个回调对象中定义一个操纵 JdbcTemplate 中变量的方法,我们去实现这个方法,就把变化的东西集中到这里了。然后我们再传入这个回调对象到 JdbcTemplate,从而完成了调用。这可能是 Template Method 不需要继承的另一种实现方式吧。

3. Mybatis 中一级缓存与二级缓存?(2017-12-4-lyq)

1. 一级缓存: 基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该 Session 中的所有 Cache 就将清空。

2. 二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap 存储,不同在于其存储作用域为 Mapper(Namespace),并且可自定义存储源,如 Ehcache。作用域为 namespance 是指对该 namespace 对应的配置文件中所有的 select 操作结果都缓存,这样不同线程之间就可以共用二级缓存。启动二级缓存:在 mapper 配置文件中:<cache />。

    二级缓存可以设置返回的缓存对象策略:<cache readOnly="true">。当 readOnly="true"时,表示二级缓存返回给所有调用者同一个缓存对象实例,调用者可以 update 获取的缓存实例,但是这样可能会造成其他调用者出现数 据不一致的情况(因为所有调用者调用的是同一个实例)。当 readOnly="false"时,返回给调用者的是二级缓存总缓 存对象的拷贝,即不同调用者获取的是缓存对象不同的实例,这样调用者对各自的缓存对象的修改不会影响到其他的调用者,即是安全的,所以默认是 readOnly="false";

3. 对于缓存数据更新机制,当某一个作用域(一级缓存 Session/二级缓存 Namespaces)的进行了 C/U/D 操作后, 默认该作用域下所有 select 中的缓存将被 clear。

4.Java反射模式

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值