7個設計模式在Spring中的應用

工廠方法模式

Spring中提供了FactoryBean接口,用於創建各種不同的Bean。

 

 

 

開發人員也可以自己實現該接口,常用於框架集成。比如SqlSessionFactoryBean就是如此。

模板方法模式

Spring針對JDBC,JMS,JPA等規範,都提供了相應的模板方法類,如JdbcTemplate,JmsTemplate, JpaTemplate。 例如JdbcTemplate,它提供了很多常用的增加,刪除,查詢,修改方法模板。而JMSTemplate則提供了對於消息的發送,接收方法等。下面是JMSTemplate的部分方法圖

 

 

 

代理模式

Spring中AOP,事務等都大量運用了代理模式。

觀察者模式

Spring中提供了一種事件監聽機制,即ApplicationListener,可以實現Spring容器內的事件監聽。

主要是以下兩個接口: 發佈消息

 

 

 

監聽消息

 

 

 

單例模式

Spring默認的創建Bean的作用域就是單例,即每個Spring容器中只存在一個該類的實例。可以通過@Scope(“prototype”)來修改成prototype模式,prototype在設計模式中叫做原型模式,實際上,Spring中對於@Scope(“prototype”)標記的Bean的處理的確是原型模式。

原型模式

原型模式是創建型模式的一種,其特點在於通過“複製”一個已經存在的實例來返回新的實例,而不是新建實例。被複制的實例就是我們所稱的“原型”,這個原型是可定製的。
原型模式多用於創建複雜的或者耗時的實例,因爲這種情況下,複製一個已經存在的實例使程序運行更高效;或者創建值相等,只是命名不一樣的同類數據。

Spring中,如果一個類被標記爲”prototype”,每一次請求(將其注入到另一個bean中,或者以程序的方式調用容器的getBean()方法)都會產生一個新的bean實例。
但是,Spring不能對一個prototype Bean的整個生命週期負責,容器在初始化、配置、裝飾或者是裝配完一個prototype實例後,將它交給客戶端,隨後就對該prototype實例不聞不問了。不管何種作用域,容器都會調用所有對象的初始化生命週期回調方法,而對prototype而言,任何配置好的析構生命週期回調方法都將不會被調用。清除prototype作用域的對象並釋放任何prototype bean所持有的昂貴資源,都是客戶端代碼的職責。

職責鏈模式

在SpringMVC中,我們會經常使用一些攔截器(HandlerInterceptor),當存在多個攔截器的時候,所有的攔截器就構成了一條攔截器鏈。SpringMVC中使用HandlerExecutionChain類來將所有的攔截器組裝在一起。
需要注意的是preHandle方法的返回值是boolean類型,用於決定是否需要下一個攔截器繼續處理。


作者:小姐姐味道
鏈接:https://juejin.im/post/5d3034ede51d45776031b095

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章