Spring框架簡介
Spring框架簡介
本系列部落格將講述Spring Framework相關的概念和基本用法。
所使用的Spring Framework版本為5.2.x,內容主要來源於Spring官網、視訊教程和一些部落格。
根據Spring官網定義的核心技術點有:
IoC Container, Events, Resources, i18n, Validation, Data Binding, Type Conversion, SpEL, AOP
本系列部落格重點在於IoC和AOP。
核心概念
IoC與DI
控制反轉,即IoC(Inverse of Control),從字面上理解控制反轉就是將對在自身物件中的一個內建物件的控制權反轉。所謂的反轉,即把內建物件的控制權(可簡單理解為建立與銷燬)反轉給一個容器,而應用程式只需要提供物件的型別即可。這是一種解耦的設計思想
而IoC的具體實現技術通常有依賴注入(Dependency Injection,簡稱DI)和依賴查詢(Dependency Lookup)。通過控制反轉,物件在被建立的時候,由一個調控系統內所有物件的外界實體將其所依賴的物件的引用傳遞給它。也可以說,依賴被注入到物件中。[1]
在Spring中,IoC是由DI來實現的,於是有了官網這句話:IoC is also known as dependency injection (DI)[2]
Spring Bean
首先得理解一下什麼是Bean。從查到一些資料來看,Bean就是符合一些約定的Java類(如屬性用getXxx
方法來訪問)[3]
那麼Spring Bean就比較好理解了,就是由Spring容器建立和管理的Java類(A bean is an object that is instantiated, assembled, and otherwise managed by a Spring IoC container)。
上面是從概念上理解的,從程式碼上來看Spring Bean又是什麼呢?
在Spring容器內,所有配置的bean都會被表示為BeanDefinition
物件(這是一個介面),這個物件主要包含了以下資訊[5]:
元資訊 | 釋義 |
---|---|
類全限定名 | 定義的bean的實際實現類 |
行為配置 | 如scope, lifecycle callbacks |
引用 | 對其他bean依賴 |
其他資訊 | 如連線池的大小之類 |
IoC容器簡介
Spring的IoC容器主要職責是建立bean和為bean注入依賴。從程式碼上來看,org.springframework.beans
和org.springframework.context
兩個包是Spring的IoC容器的基礎。BeanFactory
介面提供了一種高階配置機制,能夠管理任何型別的物件。ApplicationContext
是它的子介面,添加了新功能:
- 更易與Spring的AOP整合
- 訊息資源的處理(例如使用國際化)
- 事件釋出
- 提供應用層面特定的context,如
WebApplicationContext
用於web應用。(通過繼承)
ApplicationContext及其實現類是重量級資源,有如下特點:
- 佔用記憶體大
- 單例
- 執行緒安全