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的內容時,就用到了建造者模式

 

相關文章
相關標籤/搜索