1、在框架中有時候會發現dao層和service層是相同的代碼,爲何會同時存在呢?(如下https://blog.csdn.net/fanjieshanghai/article/details/88219652侵刪)html
一、service是業務層,dao是數據訪問層。
記得之前剛學編程的時候,都是在service裏直接調用dao,service裏面就new一個dao類對象,調用,其餘有意義的事沒作,也不明白有這個有什麼用,參加工做久了之後就會知道,業務纔是工做中的重中之重。
咱們都知道,標準主流如今的編程方式都是採用MVC綜合設計模式,MVC自己不屬於設計模式的一種,它描述的是一種結構,最終目的達到解耦,解耦說的意思是你更改某一層代碼,不會影響我其餘層代碼,若是你會像spring這樣的框架,你會了解面向接口編程,表示層調用控制層,控制層調用業務層,業務層調用數據訪問層。初期也許都是new對象去調用下一層,好比你在業務層new一個DAO類的對象,調用DAO類方法訪問數據庫,這樣寫是不對的,由於在業務層中是不該該含有具體對象,最多隻能有引用,若是有具體對象存在,就耦合了。當那個對象不存在,我還要修改業務的代碼,這不符合邏輯。比如主板上內存壞了,我換內存,不必連主板一塊兒換。我不用知道內存是哪家生產,不用知道多大容量,只要是內存均可以插上這個接口使用。這就是MVC的意義。
接下來講service的意義,其實由於你如今作東西分層次不是那麼嚴格,在一個大家作東西業務自己也少,舉個最簡單的例子,你作一個分頁的功能,數據1000條,你20條在一個頁,你能夠把這個功能寫成工具類封裝起來,而後在業務層裏調用這個封裝的方法,這纔是業務裏真正幹得事,只要沒訪問數據庫的,都要在業務裏寫。java
二、DAO接口web
爲每一個DAO聲明接口的好處在於:spring
①、能夠在還沒有實現具體DAO的時候編寫上層代碼,如Service裏對DAO的調用數據庫
②、能夠爲DAO進行多實現,例若有JDBCDAO實現,MyBatisDAO實現,而不須要更改上層代碼,只須要簡單的在Spring的IoC配置裏修改一下注入的DAO實現編程
三、Service接口設計模式
①、能夠在還沒有實現具體Service狀況下編寫上層改代碼,如Controller對Service的調用服務器
②、Spring不管是AOP仍是事務管理的實現都是基於動態代理的,而動態代理的實現依賴於接口,因此必須有接口的定義才能使用這些功能session
③、能夠對Service進行多實現app
詳見(https://www.jianshu.com/p/64abdd29bdf6 侵刪)
至於爲何service層要使用接口來定義有如下幾點好處:
在java中接口是多繼承的,而類是單繼承的,若是你須要一個類實現多個service,你用接口能夠實現,用類定義service就沒那麼靈活
要提供不一樣的數據庫的服務時,咱們只須要面對接口用不一樣的類實現便可,而不用重複地定義類
編程規範問題,接口化的編程爲的就是將實現封裝起來,然調用者只關心接口不關心實現,也就是「高內聚,低耦合」的思想。
2、SSM框架接口速記:
(https://blog.csdn.net/it_95/article/details/84103285侵刪)
3、一篇詳細介紹的文章
http://www.javashuo.com/article/p-fjmjkjsz-gg.html(侵刪)
4、有關攔截器、過濾器和監聽器:
一、過濾器:
依賴於servlet容器,在實現上基於函數的回調,能夠對幾乎全部的請求進行過濾,可是缺點就是一個過濾器實例只能在容器初始化時調用一次。
使用過濾器的目的是用來作一些過濾操做,獲取咱們想要獲取的數據,好比:在過濾器中修改字符編碼;修改request的一些參數,包括:過濾低俗文字、危險字符等。
二、攔截器:
依賴於web框架,在springMVC中就是依賴於SpringMVC框架。在實際上基於Java的反射機制,屬於面向編程(AOP)的一種運用。
因爲攔截器是基於web框架的調用,所以可使用Spring的依賴注入進行一些業務操做,同時一個攔截器實例在一個controller生命週期內能夠屢次調用。
可是缺點是隻能對controller請求進行攔截,對其餘的一些好比直接訪問靜態資源的請求則沒有辦法進行攔截。
三、監聽器:
一種Servlet中的特殊的類,它們能幫助開發者監聽web中的特定事件,實現了javax.servlet.ServletContextListener 接口的服務器端程序,
它也是隨web應用的啓動而啓動,只初始化一次,隨web應用的中止而銷燬。
主要做用是:感知到包括request(請求域),session(會話域)和applicaiton(應用程序)的初始化和屬性的變化。
https://blog.csdn.net/learning__java/article/details/92566869 侵刪
5、SpringMVC