Spring 容器--如何建立和載入一個 Spring 容器?
在基於 Spring 的應用中,你的應用物件生存於 Spring 容器中。
容器是 Spring 框架的核心。Spring 容器使用 DI 管理構成應用的元件,它會建立相互協作的元件之間的關聯。
Q:Spring 容器主要負責什麼?
A:Spring 容器負責建立物件,裝配它們,配置它們並管理它們的整個生命週期,從生存到死亡。
Q:Spring自帶了哪些容器實現?
A:第一類:bean 工廠是最簡單的容器,提供基本的 DI 支援;第二類:應用上下文基於 BeanFactory 構建,並提供應用框架級別的服務。
Q:選擇哪一類容器實現?
A:應用上下文。因為 bean 工廠對大多數應用來說往往太低階了,因此,應用上下文
2.1 使用應用上下文
Spring 自帶了多種型別的應用上下文。
- AnnotationConfigApplicationContext:從一個或多個基於 Java 的配置類中載入 Spring 應用上下文。
- AnnotationConfigWebApplicationContext:從一個或多個基於 Java 的配置類中載入 Spring Web 應用上下文。
- ClassPathXmlApplicationContext:從類路徑下的一個或多個 XML 配置檔案中載入上下文定義,把應用上下文的定義檔案作為類資源。
- FileSystemXmlapplicationcontext:從檔案系統下
- 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 應用上下文中的一個典型的生命週期過程。
下面進行詳細描述:
- Spring 對 bean 進行例項化;
- Spring 將值和 bean 的引用注入到 bean 對應的屬性中;
- 如果 bean 實現了 BeanNameAware 介面,Spring 將 bean 的 ID 傳遞給 setBeanName()方法
- 如果 bean 實現了 BeanFactoryAware 介面,Spring 將呼叫 setBeanFactory()方法,將 BeanFactory 容器例項傳入;
- 如果 bean 實現了 ApplicationContextAware 介面,Spring 將呼叫 setApplicationContext()方法,將 bean 所在的應用上下文的引用傳入進來;
- 如果 bean 實現了 BeanPostProcessor 介面,Spring 將呼叫它們的 postProcessBeforeInitialization()方法;
- 如果 bean 實現了 InitializingBean 介面,Spring 將呼叫它們的 afterPropertiesSet()方法。類似地,如果 bean 使用 initmethod 聲明瞭初始化方法,該方法也會被呼叫;
- 如果 bean 實現了 BeanPostProcessor 介面,Spring 將呼叫它們的 postProcessAfterInitialization()方法;
- 此時,bean 已經準備就緒,可以被應用程式使用了,它們將一直駐留在應用上下文中,知道該應用上下文被銷燬;
- 如果 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-ws和spring建立和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