Spring,SpringMvc,MyBatis用到的设计模式

1.MyBatis:java

首先看MyBatis执行流程:spring

(1)首先,SqlSessionFactoryBuilder 去读取 mybatis 的配置文件,而后 build 一个 DefaultSqlSessionFactory。
(2)当咱们获取到 SqlSessionFactory 以后,就能够经过 SqlSessionFactory 去获取 SqlSession 对象
(3)拿到 SqlSession 对象之后就能够调用 SqlSession 中一系列的 select..., insert..., update..., delete...方法轻松自如的
进行 CRUD 操做了。
  MapperProxy:在 mybatis 中,经过 MapperProxy 动态代理我们的 dao, 也就是说, 当我们执行本身写的 dao 里面的方法的时候,实际上是对应的 mapperProxy 在代理。那么,我们就看看怎么获取 MapperProxy 对象吧:MapperProxyFactory 的动态代理,我们就能够方便地使用 dao 接口。
 
  1. *Builder模式,例如SqlSessionFactoryBuilder(加载mybatis配置文件时建立SqlSessionFactory)、XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuilder(在mybatis初始化mapper映射文件的过程当中,为<cache>节点建立Cache对象);
  2. *工厂模式,例如SqlSessionFactory、ObjectFactory、MapperProxyFactory;
  3. *单例模式,例如ErrorContext和LogFactory;
  4. 代理模式,Mybatis实现的核心,好比MapperProxy、ConnectionLogger,用的jdk的动态代理;还有executor.loader包使用了cglib或者javassist达到延迟加载的效果;
  5. 组合模式,例如SqlNode和各个子类ChooseSqlNode等;
  6. 模板方法模式,例如BaseExecutor和SimpleExecutor,还有BaseTypeHandler和全部的子类例如IntegerTypeHandler;
  7. *适配器模式,例如Log的Mybatis接口和它对jdbc、log4j等各类日志框架的适配实现;
  8. 装饰者模式,Cache接口的实现有多个,可是大部分都是装饰器,只有PerpetualCache提供了Cache接口的基本实现,其余的装饰器都是在PerpetualCache的基础上提供了一些额外的功能,经过各类组合后知足一个特定的需求。;
  9. 迭代器模式,例如迭代器模式PropertyTokenizer;

 

2.Spring:数据库

1.工厂模式:
  Spring使用工厂模式能够经过  或  建立 bean 对象。
  BeanFactory :延迟注入(getBean的时候才会注入),相比于BeanFactory来讲会占用更
  少的内存,程序启动速度更快。
  ApplicationContext :容器启动的时候,无论你用没用到,一次性建立全部 bean 。
2.单例模式:
  Spring 中 bean 的默认做用域就是 singleton(单例)的。 注解:
3.代理模式:
  AOP中:JDK,CGLIB两种动态代理,BeanFactoryApplicationContext@Scope(value = "singleton")
4.模板模式:
  、 等以 Template 结尾的对数据库操做的类jdbcTemplatehibernateTemplate
 5.装饰器模式wrapper : 咱们的项目须要链接多个数据库,并且不一样的客户在每次访问中根据须要会去访问不一样的数据库。这种模式让咱们能够根据客户的需求可以动态切换不一样的数据源。
 
  6.观察者模式: Spring 事件驱动模型就是观察者模式很经典的一个应用。
 
 7.适配器模式 :Spring AOP 的加强或通知(Advice)使用到了适配器模式,与之相关的接口是AdvisorAdapter,Spring预约义的通知要经过对应的适配器,适配成 MethodInterceptor接口(方法拦截器)类型的对象。  spring MVC DispatcherServlet 根据请求信息调用 HandlerMapping,解析请求对应的 Handler。解析到对应的 Handler(也就是咱们日常说的 Controller 控制器)后,开始由HandlerAdapter 适配器处理。HandlerAdapter 做为指望接口,具体的适配器实现类用于对目标类进行适配,Controller 做为须要适配的类。
  

观察者模式:mybatis

    是一种对象行为型模式。它表示的是一种对象与对象之间具备依赖关系,当一个对象发生改变的时候,这个对象所依赖的对象也会作出反应。Spring 事件驱动模型就是观察者模式很经典的一个应用。Spring 事件驱动模型很是有用,在不少场景均可以解耦咱们的代码。好比咱们每次添加商品的时候都须要从新更新商品索引,这个时候就能够利用观察者模式来解决这个问题。app

  Spring事件流程:框架

定义一个事件: 实现一个继承自 ApplicationEvent,而且写相应的构造函数;

定义一个事件监听者:实现 ApplicationListener 接口,重写 onApplicationEvent() 方法;

使用事件发布者发布消息: 能够经过 ApplicationEventPublisher 的 publishEvent() 方法发布消息。

 

Spring AOP 和 AspectJ AOP 有什么区别?
  Sprin.g AOP 属于运行时加强,而 AspectJ 是编译时加强。 Spring AOP 基于代理(Proxying),而 AspectJ 基于字节码操做(Bytecode Manipulation)。函数

  Spring AOP 已经集成了 AspectJ ,AspectJ 应该算的上是 Java 生态系统中最完整的 AOP 框架了。AspectJ 相比于 Spring AOP 功能更增强大,可是 Spring AOP 相对来讲更简单,若是咱们的切面比较少,那么二者性能差别不大。可是,当切面太多的话,最好选择 AspectJ ,它比Spring AOP 快不少。性能

  

3.SpringMVC:ui

 
   
*责任链模式:
  DispatcherServlet这个核心类中使用到了HandlerExecutionChain这个类,他就是责任链模式实行的具体类。
组合模式:
  DelegatingWebMvcConfiguration类
*适配器模式:   HandlerAdapter接口
策略模式:
  DispatchServlet中的初始化组件中,用到了getDefaultStrategies方法,来决定不一样组件的默认类型以实现组件的初始化操做。
建造者模式:
  springMVC在构建UriComponents的内容时,就用到了建造者模式

 

相关文章
相关标签/搜索