一、在框架中有時候會發現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