為了以更面向框架的風格來增強beanfactory的功能,上下文包還提供了以下功能:
1. 使用messagesource國際化
通過實現messagesource
介面定製國際化功能(也可以使用spring已提供的實現類),spring還提供了其子介面hierarchicalmessagesource
,該子介面可以分層地解析訊息。這兩個介面一起提供了spring實現訊息解析的基礎。
messagesource
介面定義了三個過載方法:
其引數含義為:
spring總共提供了4個messagesource
實現類:resourcebundlemessagesource
、staticmessagesource
、delegatingmessagesource
和reloadableresourcebundlemessagesource
。它們都實現了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
然後我們在配置類中註冊messagesource
bean,顯然,我們得使用resourcebundlemessagesource
實現類。
@configuration
public
class
myconfig
}
public
static
void
main
(string[
] args)
,"default"
, locale.simplified_chinese)
;//列印:chinese my name is 張三
system.out.
println
(message)
;}
2. 標準和自定義事件*resourcebundlemessagesource
還有其它替代方案,spring提供了reloadableresourcebundlemessagesource
實現類,它同樣支援bundle檔案格式,但是比基於jdk標準的resourcebundlemessagesource
更加靈活。它還能讀取外部檔案(不僅僅是類路徑下),此外,它還支援bundle屬性檔案的熱載入。
關於spring所提供的標準事件:
事件描述
contextrefreshedevent
當容器初始化或重新整理時發布事件(重新整理指容器上下文物件的refresh()方法),只要容器上下文物件未關閉,可重複重新整理。但部分容器上下文物件不支援重新整理功能。
contextstartedevent
當容器上下文物件使用start()方法顯式的啟動時發布事件,一般用於容器停止後再重新啟動。
contextstoppedevent
當容器上下文物件使用stop()方法顯式的停止時發布事件。所有生命週期內的bean都將會接收乙個停止的訊號。
contextclosedevent
當容器上下文物件使用close()方法時發布事件。容器關閉,銷毀所有單例bean,並且無法重新開啟和重新整理。
requesthandledevent
應用於web中,當請求完成後發布事件。
servletrequesthandledevent
requesthandledevent
子類,用於新增特定的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 思想。打個比方 孩子長大了需要找老師,你需...