1. 程式人生 > >Spring Aware容器感知技術

Spring Aware容器感知技術

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);
    }

}