SpringMVC+SpringBoot+MyBatis


 

一、在框架中有時候會發現dao層和service層是相同的代碼,為什么會同時存在呢?(以下https://blog.csdn.net/fanjieshanghai/article/details/88219652侵刪)

1、service是業務層,dao是數據訪問層。
  記得以前剛學編程的時候,都是在service里直接調用dao,service里面就new一個dao類對象,調用,其他有意義的事沒做,也不明白有這個有什么用,參加工作久了以后就會知道,業務才是工作中的重中之重。
  我們都知道,標准主流現在的編程方式都是采用MVC綜合設計模式,MVC本身不屬於設計模式的一種,它描述的是一種結構,最終目的達到解耦,解耦說的意思是你更改某一層代碼,不會影響我其他層代碼,如果你會像spring這樣的框架,你會了解面向接口編程,表示層調用控制層,控制層調用業務層,業務層調用數據訪問層。初期也許都是new對象去調用下一層,比如你在業務層new一個DAO類的對象,調用DAO類方法訪問數據庫,這樣寫是不對的,因為在業務層中是不應該含有具體對象,最多只能有引用,如果有具體對象存在,就耦合了。當那個對象不存在,我還要修改業務的代碼,這不符合邏輯。好比主板上內存壞了,我換內存,沒必要連主板一起換。我不用知道內存是哪家生產,不用知道多大容量,只要是內存都可以插上這個接口使用。這就是MVC的意義。
  接下來說service的意義,其實因為你現在做東西分層次不是那么嚴格,在一個你們做東西業務本身也少,舉個最簡單的例子,你做一個分頁的功能,數據1000條,你20條在一個頁,你可以把這個功能寫成工具類封裝起來,然后在業務層里調用這個封裝的方法,這才是業務里真正干得事,只要沒訪問數據庫的,都要在業務里寫。

2、DAO接口

為每個DAO聲明接口的好處在於:

①、可以在尚未實現具體DAO的時候編寫上層代碼,如Service里對DAO的調用

②、可以為DAO進行多實現,例如有JDBCDAO實現,MyBatisDAO實現,而不需要更改上層代碼,只需要簡單的在Spring的IoC配置里修改一下注入的DAO實現

3、Service接口

①、可以在尚未實現具體Service情況下編寫上層改代碼,如Controller對Service的調用

②、Spring無論是AOP還是事務管理的實現都是基於動態代理的,而動態代理的實現依賴於接口,所以必須有接口的定義才能使用這些功能

③、可以對Service進行多實現

詳見(https://www.jianshu.com/p/64abdd29bdf6 侵刪)

  

至於為什么service層要使用接口來定義有以下幾點好處: 

  • 在java中接口是多繼承的,而類是單繼承的,如果你需要一個類實現多個service,你用接口可以實現,用類定義service就沒那么靈活

  • 要提供不同的數據庫的服務時,我們只需要面對接口用不同的類實現即可,而不用重復地定義類

  • 編程規范問題,接口化的編程為的就是將實現封裝起來,然調用者只關心接口不關心實現,也就是“高內聚,低耦合”的思想。

二、SSM框架接口速記:

https://blog.csdn.net/it_95/article/details/84103285侵刪)

三、一篇詳細介紹的文章

https://www.cnblogs.com/shamo89/p/7090542.html(侵刪)

 

四、有關攔截器、過濾器和監聽器:

1、過濾器:

  依賴於servlet容器,在實現上基於函數的回調,可以對幾乎所有的請求進行過濾,但是缺點就是一個過濾器實例只能在容器初始化時調用一次。

  使用過濾器的目的是用來做一些過濾操作,獲取我們想要獲取的數據,比如:在過濾器中修改字符編碼;修改request的一些參數,包括:過濾低俗文字、危險字符等。

2、攔截器:

  依賴於web框架,在springMVC中就是依賴於SpringMVC框架。在實際上基於Java的反射機制,屬於面向編程(AOP)的一種運用。

  由於攔截器是基於web框架的調用,因此可以使用Spring的依賴注入進行一些業務操作,同時一個攔截器實例在一個controller生命周期內可以多次調用。

  但是缺點是只能對controller請求進行攔截,對其他的一些比如直接訪問靜態資源的請求則沒有辦法進行攔截。

3、監聽器:

  一種Servlet中的特殊的類,它們能幫助開發者監聽web中的特定事件,實現了javax.servlet.ServletContextListener 接口的服務器端程序,

  它也是隨web應用的啟動而啟動,只初始化一次,隨web應用的停止而銷毀。

  主要作用是:感知到包括request(請求域),session(會話域)和applicaiton(應用程序)的初始化和屬性的變化。

  https://blog.csdn.net/learning__java/article/details/92566869  侵刪

五、SpringMVC


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM