Spring Aware容器感知技術
阿新 • • 發佈:2019-02-16
Spring Aware是什麼
Spring提供Aware介面能讓Bean感知Spring容器的存在,即讓Bean可以使用Spring容器所提供的資源。
Spring Aware的分類
幾種常用的Aware介面如下。
Aware介面 | 說明 |
---|---|
ApplicationContextAware | 能獲取Application Context呼叫容器的服務 |
ApplicationEventPublisherAware | 應用事件釋出器,可以用來發布事件 |
BeanClassLoaderAware | 能獲取載入當前Bean的類載入器 |
BeanFactoryAware | 能獲取Bean Factory呼叫容器的服務 |
BeanNameAware | 能獲取當前Bean的名稱 |
EnvironmentAware | 能獲取當前容器的環境屬性資訊 |
MessageSourceAware | 能獲取國際化文字資訊 |
ResourceLoaderAware | 獲取資源載入器讀取資原始檔 |
ServletConfigAware | 能獲取到ServletConfig |
ServletContextAware | 能獲取到ServletContext |
更多的可以看它的繼承圖。
Spring Aware的使用
如要獲取容器中的某個Bean,可以繼承ApplicationContextAware,讓這個Bean擁有呼叫容器服務的能力。
import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; public class SpringAppContext implements ApplicationContextAware { private static ApplicationContext applicationContext = null; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { if (SpringAppContext.applicationContext == null) { SpringAppContext.applicationContext = applicationContext; } } public static ApplicationContext getApplicationContext() { return applicationContext; } public static Object getBean(String name) { return getApplicationContext().getBean(name); } public static <T> T getBean(Class<T> clazz) { return getApplicationContext().getBean(clazz); } public static <T> T getBean(String name, Class<T> clazz) { return getApplicationContext().getBean(name, clazz); } }