您好,登錄后才能下訂單哦!
這篇文章主要介紹“spring IOC是什么及有哪些設計模式”,在日常操作中,相信很多人在spring IOC是什么及有哪些設計模式問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”spring IOC是什么及有哪些設計模式”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
控制反轉(inversion of control)和依賴注入(dependency injection)其實是同一個概念。當某個方法需要另外一個對象協助的時候,傳統的方法就是有調用者來通過new創建被調用者的實例,但是在spring中創建被調用者的工作不再有調用者來完成,稱之為控制反轉(ioc)。創建被調用者的工作由spring來完成,然后注入調用者,成為依賴注入。
這樣做得目的當然是為了解耦,減低類之間得耦合度,其設計思想就是設計模式中得工廠模式。在spring容器啟動得時候,spring會將配置項中配置好得bean都初始化。需要調用得時候,把初始化得bean分配給調用的類,而不需要手動創建一個對象實例。
對于springIOC來說由兩處地方最重要,一個是創建bean容器,一個是初始化bean。
在Sping IoC的體系結構中BeanFactory作為最頂層的一個接口類,它定義了IoC容器的基本功能規范。并且為了區分在 Spring 內部在操作過程中對象的傳遞和轉化過程中,對對象的數據訪問做限制,使用了多層接口ListableBeanFactory 接口表示這些 Bean 是可列表的. HierarchicalBeanFactory 表示的是這些 Bean 是有繼承關系的,也就是每個Bean 有可能有父 Bean。AutowireCapableBeanFactory 接口定義 Bean 的自動裝配規則。
默認實現類是 DefaultListableBeanFactory,他實現了所有的接口.
在springIOC中用到的設計模式有四種:工廠模式,單例模式,策略模式,裝飾者模式。
Spring IOC容器就像是一個工廠一樣,當我們需要創建一個對象的時候,只需要配置好配置文件/注解即可,完全不用考慮對象是如何被創建出來的。IOC 容器負責創建對象,將對象連接在一起,配置這些對象,并從創建中處理這些對象的整個生命周期(多例的對象spring不會管理生命周期),直到它們被完全銷毀。
Spring使用工廠模式可以通過BeanFactory或者ApplicationContext創建bean對象。
BeanFactory:延遲注入(spring默認為懶加載,即使用到某個bean的時候才會注入,可以通過@Lazy(false)設置為非懶加載)。相比于ApplicationContext來說會占用更少的內存。
ApplicationContext:容器啟動的時候,不管有沒有用到,一次性創建所有的bean,ApplicationContext繼承了BeanFactory,除了BeanFactory的功能外還有額外的更多功能,所以一般使用的更多。
Spring 中 bean 的默認作用域就是 singleton(單例)的。Spring中實現單例的方式有兩種:
xml : <bean id="userService" class="top.snailclimb.UserService" scope="singleton"/> 注解:@Scope(value = "singleton")
除了singleton作用域,Spring中bean還有下面幾種作用域:
prototype : 每次請求都會創建一個新的 bean 實例。
request : 每一次HTTP請求都會產生一個新的bean,該bean僅在當前HTTP request內有效。
session : 每一次HTTP請求都會產生一個新的 bean,該bean僅在當前 HTTP session 內有效。
global-session: 全局session作用域,僅僅在基于portlet的web應用中才有意義,Spring5已經沒有了。Portlet是能夠生成語義代碼(例如:HTML)片段的小型Java Web插件。它們基于portlet容器,可以像servlet一樣處理HTTP請求。但是,與 servlet 不同,每個 portlet 都有不同的會話。
在spring中通過ApplicationContext 來獲取Resource的實例,包括urlResource,classPathResource,fileSystenResource等不同的資源類型,spring針對不同的資源類型采取不同的訪問策略。ApplicationContext 將會負責選擇 Resource 的實現類,也就是確定具體的資源訪問策略,從而將應用程序和具體的資源訪問策略分離開來。
裝飾者模式可以動態地給對象添加一些額外的屬性或行為。相比于使用繼承,裝飾者模式更加靈活。簡單點兒說就是當我們需要修改原有的功能,但我們又不愿直接去修改原有的代碼時,設計一個Decorator套在原有代碼外面。其實在 JDK 中就有很多地方用到了裝飾者模式,比如 InputStream家族,InputStream 類下有 FileInputStream (讀取文件)、BufferedInputStream (增加緩存,使讀取文件速度大大提升)等子類都在不修改InputStream 代碼的情況下擴展了它的功能。
Spring中類中帶有Wrapper的都是包裝類。
到此,關于“spring IOC是什么及有哪些設計模式”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。