天天看點

Spring核心作用包介紹

作者:Java功夫

Spring核心作用包介紹

一、Spring架構的組成

Spring核心作用包介紹

1.1Spring核心容器

Beans : Beans子產品是所有應用都要用到的,它包含通路配置檔案、建立和管理bean以及進行Inversion of Control / Depen-dency Injection(IoC/DI)操作相關的所有類。

Core : Core子產品主要包含Spring架構基本的核心工具類,Spring的其他元件要都要使用到這個包裡的類,Core子產品是其他元件的基本核心。當然你也可以在自己的應用系統中使用這些工具類。

Context : Spring的上下文即IoC容器,通過上下文可以獲得容器中的Bean。 ApplicationContext接口是Context子產品的關鍵。 Context子產品建構于Core和Beans子產品基礎之上,提供了一種類似于JNDI注冊器的架構式的對象通路方法。

SpEl : Expression Language子產品提供了一個強大的表達式語言用于在運作時查詢和操縱對象。

Spring核心作用包介紹

1.2Spring的主要元件

Spring AOP:Spring的面向切面程式設計,提供AOP(面向切面程式設計)的實作

Spring Aspects:Spring提供的對AspectJ架構的整合

Spring Beans:Spring IOC的基礎實作,包含通路配置檔案、建立和管理bean等,所有應用都用到。

Spring Context:在基礎IOC功能上提供擴充服務,此外還提供許多企業級服務的支援,有郵件服務、任務排程、JNDI定位,EJB內建、遠端通路、緩存以及多種視圖層架構的支援。

Spring Context Support:Spring context的擴充支援,用于MVC方面。

Spring Core:Spring的核心工具包 ,其他包依賴此包

Spring expression:Spring表達式語言

Spring Instrument:Spring對伺服器的代理接口

Spring Instrument Tomcat:Spring對tomcat連接配接池的內建

Spring JDBC:對JDBC 的簡單封裝

Spring JMS:為簡化jms api的使用而做的簡單封裝

Spring orm:整合第三方的orm實作,如hibernate,ibatis,jdo以及spring 的jpa實作

Spring oxm:Spring對于object/xml映射的支援,可以讓JAVA與XML之間來回切換

Spring test:對JUNIT等測試架構的簡單封裝

Spring tx:為JDBC、Hibernate、JDO、JPA等提供的一緻的聲明式和程式設計式事務管理。

Spring web:包含Web應用開發時,用到Spring架構時所需的核心類,包括自動載入WebApplicationContext特性的類、Struts與JSF內建類、檔案上傳的支援類、Filter類和大量工具輔助類。

Spring webmvc:包含SpringMVC架構相關的所有類。包含國際化、标簽、Theme、視圖展現的FreeMarker、JasperReports、 Tiles、Velocity、XSLT相關類。當然,如果你的應用使用了獨立的MVC架構,則無需這個JAR檔案裡的任何類。

Spring webmvc portlet:Spring MVC的增強

Spring websocket:提供 Socket通信, web端的推送功能

Spring核心作用包介紹

二、Spring原理及特點

Spring是一個全面的、企業應用開發一站式的解決方案,貫穿表現層、業務層、持久層。但是 Spring仍然可以和其他的架構無縫整合。

Spring核心作用包介紹

2.1Spring特點

輕量級

控制反轉

面向切面

容器

架構集合

Spring核心作用包介紹

2.2IOC容器實作

BeanFactory 是 Spring 架構的基礎設施,面向 Spring 本身;ApplicationContext 面向使用Spring 架構的開發者,幾乎所有的應用場合我們都直接使用 ApplicationContext 而非底層的 BeanFactory。

2.2.1BeanDefinitionRegistry 系統資料庫

Spring 配置檔案中每一個節點元素在 Spring 容器裡都通過一個 BeanDefinition 對象表示,它描述了 Bean 的配置資訊。而 BeanDefinitionRegistry 接口提供了向容器手工注冊BeanDefinition 對象的方法。

2.2.2BeanFactory 頂層接口

位于類結構樹的頂端 ,它最主要的方法就是 getBean(String beanName),該方法從容器中傳回特定名稱的 Bean,BeanFactory 的功能通過其他的接口得到不斷擴充:

2.2.3ListableBeanFactory

該接口定義了通路容器中 Bean 基本資訊的若幹方法,如檢視 Bean 的個數、擷取某一類型Bean 的配置名、檢視容器中是否包括某一 Bean 等方法;

Spring核心作用包介紹

2.3ApplicationContext 面向開發應用

ApplicationContext 由 BeanFactory 派 生 而 來 , 提 供 了 更 多 面 向 實 際 應 用 的 功 能 。

ApplicationContext 繼承了 HierarchicalBeanFactory 和 ListableBeanFactory 接口,在此基礎

上,還通過多個其他的接口擴充了 BeanFactory 的功能

1. ClassPathXmlApplicationContext:預設從類路徑加載配置檔案

2. FileSystemXmlApplicationContext:預設從檔案系統中裝載配置檔案

3. ApplicationEventPublisher:讓容器擁有釋出應用上下文事件的功能,包括容器啟動事件、關閉事件等。

4. MessageSource:為應用提供 i18n 國際化消息通路的功能;

5. ResourcePatternResolver : 所 有 ApplicationContext 實作類都實作了類似于PathMatchingResourcePatternResolver 的功能,可以通過帶字首的 Ant 風格的資源檔案路徑裝載 Spring 的配置檔案。

6. LifeCycle:該接口是 Spring 2.0 加入的,該接口提供了 start()和 stop()兩個方法,主要用于控制異步處理過程。在具體使用時,該接口同時被 ApplicationContext 實作及具體Bean 實作, ApplicationContext 會将 start/stop 的資訊傳遞給容器中所有實作了該接口的 Bean,以達到管理和控制 JMX、任務排程等目的。

7. ConfigurableApplicationContext 擴充于 ApplicationContext,它新增加了兩個主要的方法: refresh()和 close(),讓 ApplicationContext 具有啟動、重新整理和關閉應用上下文的能力。在應用上下文關閉的情況下調用 refresh()即可啟動應用上下文,在已經啟動的狀态下,調用 refresh()則清除緩存并重新裝載配置資訊,而調用 close()則可關閉應用上下文。

Spring核心作用包介紹

三、Spring生命周期

執行個體化

1. 執行個體化一個 Bean,也就是我們常說的 new。

IOC 依賴注入

2. 按照 Spring 上下文對執行個體化的 Bean 進行配置,也就是 IOC 注入。

setBeanName 實作

3. 如果這個 Bean 已經實作了 BeanNameAware 接口,會調用它實作的 setBeanName(String)方法,此處傳遞的就是 Spring 配置檔案中 Bean 的 id 值

BeanFactoryAware 實作

4. 如果這個 Bean 已經實作了 BeanFactoryAware 接口,會調用它實作的 setBeanFactory,setBeanFactory(BeanFactory)傳遞的是 Spring 工廠自身(可以用這個方式來擷取其它 Bean,隻需在 Spring 配置檔案中配置一個普通的 Bean 就可以)。ApplicationContextAware 實作

5. 如果這個 Bean 已經實作了 ApplicationContextAware 接口,會調用

setApplicationContext(ApplicationContext)方法,傳入 Spring 上下文(同樣這個方式也可以實作步驟 4 的内容,但比 4 更好,因為 ApplicationContext 是 BeanFactory 的子接口,有更多的實作方法)

postProcessBeforeInitialization 接口實作-初始化預處理

6. 如果這個 Bean 關聯了 BeanPostProcessor 接口,将會調用

postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor 經常被用作是 Bean 内容的更改,并且由于這個是在 Bean 初始化結束時調用那個的方法,也可以被應用于記憶體或緩存技術。

init-method

7. 如果 Bean 在 Spring 配置檔案中配置了 init-method 屬性會自動調用其配置的初始化方法。

postProcessAfterInitialization

8. 如果這個 Bean 關聯了 BeanPostProcessor 接口,将會調用

postProcessAfterInitialization(Object obj, String s)方法。

9. 當 Bean 不再需要時,會經過清理階段,如果 Bean 實作了 DisposableBean 這個接口,會調用那個其實作的 destroy()方法;destroy-method 自配置清理

10. 最後,如果這個 Bean 的 Spring 配置中配置了 destroy-method 屬性,會自動調用其配置的銷毀方法。

以上就是Spring核心作用包的常用介紹,更多知識請關注我。