1. 程式人生 > >Spring 容器--如何建立和載入一個 Spring 容器?

Spring 容器--如何建立和載入一個 Spring 容器?

在基於 Spring 的應用中,你的應用物件生存於 Spring 容器中。

容器是 Spring 框架的核心。Spring 容器使用 DI 管理構成應用的元件,它會建立相互協作的元件之間的關聯。

Q:Spring 容器主要負責什麼?
A:Spring 容器負責建立物件裝配它們,配置它們並管理它們的整個生命週期,從生存到死亡。

Q:Spring自帶了哪些容器實現?
A:第一類:bean 工廠是最簡單的容器,提供基本的 DI 支援;第二類:應用上下文基於 BeanFactory 構建,並提供應用框架級別的服務。

Q:選擇哪一類容器實現?
A:應用上下文。因為 bean 工廠對大多數應用來說往往太低階了,因此,應用上下文

要比 bean 工廠更受歡迎。

2.1 使用應用上下文

Spring 自帶了多種型別的應用上下文。

  • AnnotationConfigApplicationContext:從一個或多個基於 Java 的配置類中載入 Spring 應用上下文。
  • AnnotationConfigWebApplicationContext:從一個或多個基於 Java 的配置類中載入 Spring Web 應用上下文。
  • ClassPathXmlApplicationContext:從類路徑下的一個或多個 XML 配置檔案中載入上下文定義,把應用上下文的定義檔案作為類資源。
  • FileSystemXmlapplicationcontext:從檔案系統下
    的一個或多個 XML 配置檔案中載入上下文定義。
  • XmlWebApplicationContext:從 Web 應用下的一個或多個 XML 配置檔案中載入上下文定義。

如何使用?

// 從指定的檔案系統路徑下,查詢 knight.xml 檔案
ApplicationContext context = new FileSystemXmlApplicationContext("d:/knight.xml");

// 使用 ClassPathXmlApplicationContext 從應用的類路徑下載入應用上下文
ApplicationContext context = new ClassPathXmlApplicationContext("knight.xml"
); // 從 Java 配置中載入應用上下文 ApplicationContext context = new AnnotationConfigApplicationContext(com.springinaction.knights.config.KnightConfig.class);

2.2 bean 的生命週期

bean 裝載到 Spring 應用上下文中的一個典型的生命週期過程。
這裡寫圖片描述

下面進行詳細描述:

  1. Spring 對 bean 進行例項化;
  2. Spring 將值和 bean 的引用注入到 bean 對應的屬性中;
  3. 如果 bean 實現了 BeanNameAware 介面,Spring 將 bean 的 ID 傳遞給 setBeanName()方法
  4. 如果 bean 實現了 BeanFactoryAware 介面,Spring 將呼叫 setBeanFactory()方法,將 BeanFactory 容器例項傳入;
  5. 如果 bean 實現了 ApplicationContextAware 介面,Spring 將呼叫 setApplicationContext()方法,將 bean 所在的應用上下文的引用傳入進來;
  6. 如果 bean 實現了 BeanPostProcessor 介面,Spring 將呼叫它們的 postProcessBeforeInitialization()方法;
  7. 如果 bean 實現了 InitializingBean 介面,Spring 將呼叫它們的 afterPropertiesSet()方法。類似地,如果 bean 使用 initmethod 聲明瞭初始化方法,該方法也會被呼叫;
  8. 如果 bean 實現了 BeanPostProcessor 介面,Spring 將呼叫它們的 postProcessAfterInitialization()方法;
  9. 此時,bean 已經準備就緒,可以被應用程式使用了,它們將一直駐留在應用上下文中,知道該應用上下文被銷燬;
  10. 如果 bean 實現了 DisposableBean 介面,Spring 將呼叫它的 destory() 介面方法。同樣,如果 bean 使用 destroymethod 聲明瞭銷燬方法,該方法也會被呼叫。

相關推薦

Spring 容器--如何建立載入一個 Spring 容器

在基於 Spring 的應用中,你的應用物件生存於 Spring 容器中。 容器是 Spring 框架的核心。Spring 容器使用 DI 管理構成應用的元件,它會建立相互協作的元件之間的關聯。 Q

Spring原始碼分析4 — spring bean建立初始化

1 介紹 建立並初始化spring容器中,refresh()方法中解析xml配置檔案,註冊容器後處理器,bean後處理器,初始化MessageSource,ApplicationEventMulticaster廣播器,註冊完ApplicationListene

spring動態建立載入,使用多資料來源

專案中我們經常會遇到多資料來源的問題,尤其是資料同步或定時任務等專案更是如此。多資料來源讓人最頭痛的,不是配置多個數據源,而是如何能靈活動態的切換資料來源。例如在一個spring和hibernate的框架的專案中,我們在spring配置中往往是配置一個dataSource來

2018-11-13#Hive外表建立載入資料

hive 關聯表和外表的區別: 1. 外部表需要external關鍵之,location是資料檔案預設存放位置,不管是不管是select 還是load的資料都存放在這裡。匯入資料到外部表,資料並沒有mv到資料倉庫目錄,而是在loacation目錄。 2.內部表建表時也能加上location,作用和外部表一

Spring boot(一)、第一個Spring boot 專案

前言: 從今天開始就把學過的Spring boot做個一個總結,有時間就特定更新,設計到的東西有很多。 後續所有的Springboot都會以Spring boot2.x的版本開端。目前是2.0.5.

容器建立後,隨意更改容器內啟動指令碼

Docker.io上有無數的映象,但是很多用起來並不順手。很多情況下有報錯,容器起不來,而且沒有辦法進行排錯。 個人感覺,好用的基礎映象應該滿足幾點: 1、安全,比如說官方的CentOS、Ubuntu映象,選用軟體用自己信得過的,或者官方的yum 2、有s

Spring原始碼解析(十)分析一個Spring迴圈引用失敗的問題

前言: 之前我們有分析過Spring是怎麼解決迴圈引用的問題,主要思路就是三級快取;Spring在載入beanA的時候會先呼叫預設的空建構函式(在沒有指定建構函式例項化的前提下)得到一個空的例項引用物件,這個時候沒有設定任何值,但是Spring會用快取把它給提

nodejs中如何建立載入模組

在nodejs中,建立一個模組非常簡單,因為一個檔案就是一個模組,我們要關注的就是如何在其他檔案中獲取到這個模組。 在Node.js中提供了exports和require兩個物件, 其中exports是模組公開的介面,require用於從外部獲取一個模組的介面。 下面就是一

模板函式中使用未知型別的容器--如何遍歷一個未知容器

template<typename T1> void printList(const T1 & t1) { for(typename T1::const_iterator it =t1.begin(); it!=t1.end(); ++it)

【tensorflow】檔案佇列的兩種建立載入方式

方式1:記憶體載入 ①建立佇列: queue=tf.FIFOQueue(...) or queue=tf.RandomShuffleQueue(...) ②新增enqueue op: enqueue=tf.enqueue(xxx) or enqueue=tf.enqueue

Spring框架學習-搭建第一個Spring項目

-- @param xmlns 學習 epo 基於 config print instance 步驟一:下載Spring開發包。    官網:https://spring.io/ 下載地址:https://repo.spring.io/libs-rel

spring容器建立物件的時間載入

我們如何判斷一個物件是在spring容器啟動的時候建立的呢 還是在我們呼叫這個物件的時候建立的? 在單例的情況下: 在上面一個spring基礎(一)中,我們寫了如下的測試類: public class testHelloSpring { @Test p

使用jax-wsspring建立web容器共埠的webservice服務

本文介紹的webservice是建立在與spring整合的條件下【jdk自帶的webservices會佔用一個獨立的埠,通過這個方法配置不需要】 1、修改WEB.XML檔案,在spring的監聽器配置之後加上如下內容 <servlet> <servlet-name>JAXWS

SpringMVC系列(十五)Spring MVC與Spring整合時實例被創建兩次的解決方案以及Spring 的 IOC 容器 SpringMVC 的 IOC 容器的關系

問題 nbsp frame ota 展示 not als pri exc 一、Spring MVC與Spring整合時實例被創建兩次的解決方案 1.問題產生的原因 Spring MVC的配置文件和Spring的配置文件裏面都使用了掃描註解<context:compon

多個Spring Boot項目部署在一個Tomcat容器無法啟動

failed cau gem engine 兩種 代碼 common exce repo Tomxin7 Simple, Interesting | 簡單,有趣 本文將花費您五分鐘時間 業務介紹 最近用Spring Boot開發了一個翻譯的小項目,但是服務器上

深入研究Spring-IoC:原始碼分析容器建立

1.前言 從之前的分析中可以知道IOC容器的建立大致分為3步:Resource定位、BeanDefinition載入解析、向容器註冊BeanDefinition。 Tiny-spring手動實現了Spring框架,通過對這個原始碼的解讀可以更好更有效的理解Spring。 2.

深入研究Spring-IoC :容器建立的幾種方式

1.前言 本文為對tiny-spring的學習解讀,程式碼參考自tiny-spring。一個手寫的Spring簡易版框架。 前面已經提到了Spring IOC容器的建立大致分為3個步驟。但是這個三個步驟是有一個演進的過程的,Spring容器建立方式前後有6種,從最基本的例項化建立

Spring容器建立原始碼

BeanFactory預準備 Spring容器的refresh()【建立重新整理】; 1、prepareRefresh()重新整理前的預處理; 1)、initPropertySources()初始化一些屬性設定,本身方法為空;子類自定義個性化的屬性設定方法

Spring學習--IOC容器的概念及一個簡單IOC容器使用案例

IOC容器的概念: IOC容器就是具有依賴注入功能的容器,IOC容器負者例項化、定位、配置應用程式中的物件及監理這些物件間的依賴,應用程式無需直接在物件中new物件,而是由IOC容器進行組裝。在Spring中BeanFactory是IOC容器的實際代表。 Spring IoC容器如何知道

SSM整合(Spring、SpringMVC、Mybatis)---一個SpringMVC容器管理物件

SSM2: 一個容器, SpringMVC容器管理整個專案中的所有物件。 SSM整合的步驟: 1.使用springdb的資料庫, student表 2.新建的web應用 匯入jar: 1)spring的核心jar:spring-beans.jar,spring-core.jar,spri