Spring 核心(IOC) 容器的附加功能

2021-10-07 18:17:08 字數 3813 閱讀 8842

為了以更面向框架的風格來增強beanfactory的功能,上下文包還提供了以下功能:

1. 使用messagesource國際化

通過實現messagesource介面定製國際化功能(也可以使用spring已提供的實現類),spring還提供了其子介面hierarchicalmessagesource,該子介面可以分層地解析訊息。這兩個介面一起提供了spring實現訊息解析的基礎。

messagesource介面定義了三個過載方法:

其引數含義為:

spring總共提供了4個messagesource實現類:resourcebundlemessagesourcestaticmessagesourcedelegatingmessagesourcereloadableresourcebundlemessagesource。它們都實現了hierarchicalmessagesource介面以執行巢狀訊息傳遞。最常用的則是resourcebundlemessagesource實現類。

假設我們準備了以下國際化資源檔案:

# myi18n.properties

name=default my name is

# myi18n_en_us.properties

name=english my name is

# myi18n_zh_cn.properties

name=chinese my name is

然後我們在配置類中註冊messagesourcebean,顯然,我們得使用resourcebundlemessagesource實現類。

@configuration

public

class

myconfig

}

public

static

void

main

(string[

] args)

,"default"

, locale.simplified_chinese)

;//列印:chinese my name is 張三

system.out.

println

(message)

;}

resourcebundlemessagesource還有其它替代方案,spring提供了reloadableresourcebundlemessagesource實現類,它同樣支援bundle檔案格式,但是比基於jdk標準的resourcebundlemessagesource更加靈活。它還能讀取外部檔案(不僅僅是類路徑下),此外,它還支援bundle屬性檔案的熱載入。

2. 標準和自定義事件*

關於spring所提供的標準事件:

事件描述

contextrefreshedevent當容器初始化或重新整理時發布事件(重新整理指容器上下文物件的refresh()方法),只要容器上下文物件未關閉,可重複重新整理。但部分容器上下文物件不支援重新整理功能。

contextstartedevent當容器上下文物件使用start()方法顯式的啟動時發布事件,一般用於容器停止後再重新啟動。

contextstoppedevent當容器上下文物件使用stop()方法顯式的停止時發布事件。所有生命週期內的bean都將會接收乙個停止的訊號。

contextclosedevent當容器上下文物件使用close()方法時發布事件。容器關閉,銷毀所有單例bean,並且無法重新開啟和重新整理。

requesthandledevent應用於web中,當請求完成後發布事件。

servletrequesthandledeventrequesthandledevent子類,用於新增特定的servlet上下文資訊。

public

class

adduserevent

extends

}

@service

public

class

userdservice

implements

public

void

adduser

(user user)

}}

@component

public

class

addusereventlistener

implements

}

spring的事件機制是為同一容器上下文中的bean之間的簡單通訊而設計的。然而,在大型且複雜的企業級需求下,會使用單獨維護的專案,它有著更完整更輕量的支援,且往往在spring構建之上。

3. 基於註解的事件監聽*
@component

public

class

addusereventlistener

}

一般情況下,@eventlistener註解通過其方法引數匹配對應事件。當然,也可以通過其註解屬性指定單個或多個事件型別。

@component

public

class

addusereventlistener

)public

void

(adduserevent event)

}

甚至通過spel表示式進行邏輯匹配。

@component

public

class

addusereventlistener

}

請注意,#root.event允許你訪問底層事件,及時你方法引數中實際引用了任意的事件物件。

具體spel表示式的使用請參閱官方文件

你也可以通過這個***為跳板,發布下乙個或多個事件集合。

@component

public

class

addusereventlistener

}

此外,你還可以新增@async@order註解實現非同步事件監聽和事件監聽排序。

使用非同步事件監聽需要注意的問題:

4. web應用中方便的例項化容器上下文

>

>

contextconfiglocationparam-name

>

>

>

context-param

>

>

>

org.springframework.web.context.contextloaderlistenerlistener-class

>

listener

>

Spring的核心容器 IoC

簡單來說,beanfactory就是乙個管理bean的工廠,它主要負責初始化各種bean,並呼叫它們的生命週期方法 beanfactory factory newxmlbeanfactory new filesystemresource file beanfactory factory newxml...

IoC容器 Spring核心中的核心

spring 容器是 spring 框架的核心。容器將建立物件,把它們連線在一起,配置它們,並管理他們的整個生命週期從建立到銷毀。spring 容器使用依賴注入 di 來管理組成乙個應用程式的元件。這些物件被稱為 spring bean。1 spring主要容器包括beanfactory sprin...

Spring框架的IoC容器

ioc 是指在程式開發中,例項的建立不再由呼叫者管理,而是由 spring 容器建立。spring 容器會負責控制程式之間的關係,而不是由程式 直接控制,因此,控制權由程式 轉移到了 spring 容器中,控制權發生了反轉,這就是 spring 的 ioc 思想。打個比方 孩子長大了需要找老師,你需...