1.MyBatis:
首先看MyBatis執行流程:
(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 接口。
- *Builder模式,例如SqlSessionFactoryBuilder(加載mybatis配置文件時創建SqlSessionFactory)、XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuilder(在mybatis初始化mapper映射文件的過程中,為<cache>節點創建Cache對象);
- *工廠模式,例如SqlSessionFactory、ObjectFactory、MapperProxyFactory;
- *單例模式,例如ErrorContext和LogFactory;
- 代理模式,Mybatis實現的核心,比如MapperProxy、ConnectionLogger,用的jdk的動態代理;還有executor.loader包使用了cglib或者javassist達到延遲加載的效果;
- 組合模式,例如SqlNode和各個子類ChooseSqlNode等;
- 模板方法模式,例如BaseExecutor和SimpleExecutor,還有BaseTypeHandler和所有的子類例如IntegerTypeHandler;
- *適配器模式,例如Log的Mybatis接口和它對jdbc、log4j等各種日志框架的適配實現;
- 裝飾者模式,Cache接口的實現有多個,但是大部分都是裝飾器,只有PerpetualCache提供了Cache接口的基本實現,其他的裝飾器都是在PerpetualCache的基礎上提供了一些額外的功能,通過各種組合后滿足一個特定的需求。;
- 迭代器模式,例如迭代器模式PropertyTokenizer;
2.Spring:
1.工廠模式:
Spring使用工廠模式可以通過BeanFactory
或ApplicationContext
創建 bean 對象。
BeanFactory :延遲注入(getBean的時候才會注入),相比於BeanFactory來說會占用更
少的內存,程序啟動速度更快。
ApplicationContext :容器啟動的時候,不管你用沒用到,一次性創建所有 bean 。
2.單例模式:
Spring 中 bean 的默認作用域就是 singleton(單例)的。 注解:@Scope(value = "singleton")
3.代理模式:
AOP中:JDK,CGLIB兩種動態代理,
4.模板模式:
jdbcTemplate
、hibernateTemplate
等以 Template 結尾的對數據庫操作的類
5.裝飾器模式wrapper : 我們的項目需要連接多個數據庫,而且不同的客戶在每次訪問中根據需要會去訪問不同的數據庫。這種模式讓我們可以根據客戶的需求能夠動態切換不同的數據源。
6.觀察者模式: Spring 事件驅動模型就是觀察者模式很經典的一個應用。
7.適配器模式 :Spring AOP 的增強或通知(Advice)使用到了適配器模式,與之相關的接口是
AdvisorAdapter,Spring預定義的通知要通過對應的適配器,適配成 MethodInterceptor
接口(方法攔截器)類型的對象。
spring MVC DispatcherServlet
根據請求信息調用 HandlerMapping
,解析請求對應的 Handler
。解析到對應的 Handler
(也就是我們平常說的 Controller
控制器)后,開始由HandlerAdapter
適配器處理。HandlerAdapter
作為期望接口,具體的適配器實現類用於對目標類進行適配,Controller
作為需要適配的類。
觀察者模式:
是一種對象行為型模式。它表示的是一種對象與對象之間具有依賴關系,當一個對象發生改變的時候,這個對象所依賴的對象也會做出反應。Spring 事件驅動模型就是觀察者模式很經典的一個應用。Spring 事件驅動模型非常有用,在很多場景都可以解耦我們的代碼。比如我們每次添加商品的時候都需要重新更新商品索引,這個時候就可以利用觀察者模式來解決這個問題。
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:
*責任鏈模式:
DispatcherServlet這個核心類中使用到了HandlerExecutionChain這個類,他就是責任鏈模式實行的具體類。
組合模式:
DelegatingWebMvcConfiguration類
*適配器模式:
HandlerAdapter接口
策略模式:
DispatchServlet中的初始化組件中,用到了getDefaultStrategies方法,來決定不同組件的默認類型以實現組件的初始化操作。
建造者模式:
springMVC在構建UriComponents的內容時,就用到了建造者模式