日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

外观模式源码解析(springjdbc+myabtis+tomcat)

發布時間:2024/4/13 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 外观模式源码解析(springjdbc+myabtis+tomcat) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
我們首先看一下外觀模式在SpringJDBC中的一些應用,我們看一下JdbcUtils,為了更好理解,把外觀模式重新講了一下,用積分的場景,我們直接繼續看源碼,這個是spring.jdbc包下的,這個方法就是對JDBC方法進行了封裝,我們在開發中直接使用即可,我們也不需要封裝自己的JDBC接口,因為SpringJDBC已經做了很好的封裝,我們直接down下源碼看一下,我們往下看一下,看到第一個方法,closeConnection,這里的入參是Connection

這個連接對象我們看一下,它是屬于java.sql里面的,也就是說JDBCUtils,對Connection進行了一個封裝,而里面的調用也是調用了JDBC原生的Connection,那接著往下看,closeStatement

這里面調用的也是Statement里面的方法,同理接著往下看,使用獲取結果集的數據,用返回Object的對象,那就是JAVA原生的ResultSet,這里面還有一些其它參數

下邊就比較清晰了,首先在這里判斷類型

如果不是空的接著往下走,String類型,boolean,byte

各種類型的判斷呢,在這里面都能看到,包括BigDecimal

接著往下看,我們看一下這個方法,extractDatabaseMetaData,這里面的代碼的作用是根據DataSource,來獲取結果集中的數據,入參是DataSource,都是對原生的JDBC進行了封裝

對于JDBC的封裝,在SpringJDBC中,是這樣的,在Hibernate中也是有的,我們接著看一下其他的框架中,如何使用外觀模式的,我們再看一下Mybatis中的一些應用,在Mybatis中這個Configuration配置類,也使用了外觀模式,那我們看一下一些方法,newMetaObject,包括下面所有new開頭的方法

parameterHandler就是一些參數的轉換,還有結果集的一些Handler,Statement的Handler,那我們隨便找一個來看一下,比如newMetaObject,通過這樣封裝之后,我們客戶端都有相同的功能,這一組接口交給客戶端來訪問,那我們其他類需要使用這些對象的時候,都根據這個類里面的方法來創建,newMeataObject都有哪些調用者呢,這里面的調用者還是挺多的,都是調用configuration的newMetaObject方法來操作的,如果以后擴展,需要變化的話,我們不需要修改調用者,這些都不用改,我們只要改這個方法,就可以了,非常好理解,那門面模式在TOMCAT中,也有非常好的應用,首先我們訪問tomcat.apache.org然后把Tomcat源碼下載下來,https://tomcat.apache.org/download-90.cgi這里有source code我們直接下一個壓縮包public class RequestFacade implements HttpServletRequest我們通過名字也能夠看出來,它是一個Request的外觀類,他實現了HttpServletRequest,這個類正是HttpServletRequest的一個外觀類,那我們看一下這里面的方法,包括各種操作Request的一些方法,例如getParameter,這個小伙伴們非常熟悉,各種方法都在這里面,那么再看一下Request這個類,注意是catalina這個包下的,我們先來到這個類的最頭部public class Request implements HttpServletRequest 這個類是HttpServletRequest的子類,那這三個類都是什么關系呢,我們看看源碼,能更好的理解,Request和RequestFacade都實現了HttpServletRequest,我們可以認為他們兩都是同級的,HttpServletRequest的子類,但是在Request里面我們看一下,我們找一下facade的聲明/*** The facade associated with this request.*/ protected RequestFacade facade = null;聲明在這里,也就是說Request里面聲明了一個RequestFacade,而具體從Request里面操作的時候呢,都是facade對象,例如getRequest,使用的也是這個外觀類,public HttpServletRequest getRequest() {if (facade == null) {facade = new RequestFacade(this);}if (applicationRequest == null) {applicationRequest = facade;}return applicationRequest; }ResponseFacade和Response使用方式是一樣的,Request理解這個我們就理解了,public class ResponseFacade implements HttpServletResponse我們再看一個Session相關的,StandardSessionFacade,同理這個Facade外觀類呢,是處理HttpSession的,那在TOMCAT源碼里面,大量的使用外觀類,我們搜索一下,有很多facade結尾的類,都是在使用外觀模式,StandardWrapperFacade,StatementFacade,而這個Facade可以看到,是TOMCAT里面提供的,JDBC連接池,所以外觀模式應用是非常廣泛的,就拿RequestFacade來說,Request通過RequestFacade包裝了這個Request類,因為Request和RequestFacade,都實現了HttpServletRequest,所以在獲取Request的時候,實際返回的是一個facade,因為他兩都是他的子類,而這個RequestFacade,內部就可以根據需要進行封裝,把具體的他認為子系統的各種操作都封裝到RequestFacade這里邊,對外我們類似操作的是HttpServletRequest這個類,實際我們使用的是RequestFacade這個類,這里面我們要說一下,要下載TOMCAT源碼,在我們項目里是找不到這個類的,里面使用的是Servlet API,源碼是比較全的,比我們項目封裝起來的jar包要全很多,分析了這么多源碼呢,就是為了深刻理解外觀模式,也叫門面模式,包括我們在項目中的使用,還有在一些開源框架源碼中的使用

?

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的外观模式源码解析(springjdbc+myabtis+tomcat)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。