Spring:工具類 SpringContextHolder


環境

  1. jdk 7
  2. 4.3.24.RELEASE

工具類

說明

SpringContextHolder 可以方便地引用各種 bean 而不需要注入,通常用它來獲取延時加載的 bean 信息。
BeanFactoryPostProcessor 接口主要是為了使 SpringContextHolder 提前初始化,盡量在所有 bean 初始化之前。
ApplicationContextAware 接口主要是為了注入 ApplicationContext。

源碼

package jiangbo.springweb.context;

import java.util.Locale;

import javax.servlet.ServletContext;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.support.MessageSourceAccessor;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import org.springframework.web.context.WebApplicationContext;

@Component
public final class SpringContextHolder implements BeanFactoryPostProcessor, ApplicationContextAware {

    /** 日志記錄器 */
    private static final Logger LOGGER = LoggerFactory.getLogger(SpringContextHolder.class);

    /** ApplicationContext */
    private static ApplicationContext context;

    /** ServletContext */
    private static ServletContext servletContext;

    /** Environment */
    private static Environment environment;

    /** MessageSourceAccessor */
    private static MessageSourceAccessor messages;

    /**
     * Constructor<br>
     * 私有化工具類的構造函數
     */
    private SpringContextHolder() {
    }

    /**
     * get ApplicationContext<br>
     * 
     * @return ApplicationContext
     */
    public static ApplicationContext getSpringContext() {

        return context;
    }

    /**
     * get {@link ServletContext}<br>
     * 
     * @return {@link ServletContext}
     */
    public static ServletContext getServletContext() {

        return servletContext;
    }

    /**
     * get Environment<br/>
     * 
     * @return
     */
    public static Environment getEnvironment() {

        return environment;
    }

    /**
     * 根據名字獲得spring context中的bean<br>
     * 
     * @param name bean的名稱
     * @return bean
     */
    public static Object getBean(String name) {

        return context.getBean(name);
    }

    /**
     * 根據類型獲得spring context中的bean<br>
     * 
     * @param requiredType bean的類型
     * @return bean
     */
    public static <T> T getBean(Class<T> requiredType) {

        return context.getBean(requiredType);
    }

    /**
     * 根據名稱和類型獲得spring context中的bean<br>
     * 
     * @param name         bean 的名稱
     * @param requiredType bean的類型
     * @return bean
     */
    public static <T> T getBean(String name, Class<T> requiredType) {

        return context.getBean(name, requiredType);
    }

    /**
     * 獲取properties的值,沒有獲取到返回null<br>
     * 
     * @return 該key對應的value值
     */
    public static String getProperty(String key) {

        return environment.getProperty(key);
    }

    /**
     * 獲取properties的值,沒有獲取到拋出異常<br>
     * 
     * @throws IllegalStateException if the key cannot be resolved
     * @return 該key對應的value值
     */
    public static String getRequiredProperty(String key) {

        return environment.getRequiredProperty(key);
    }

    /**
     * set Servlet Context<br>
     * 
     * @param sc ServletContext
     */
    public static void setServletContext(ServletContext sc) {

        servletContext = sc;
    }

    /**
     * 獲取國際化訪問工具<br>
     * 
     * @return 國際化訪問工具
     */
    public static MessageSourceAccessor getMessageSourceAccessor() {

        return messages;
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) {

        init(applicationContext);
    }

    /**
     * 對相關的屬性進行賦值<br/>
     * 
     * @param applicationContext ApplicationContext
     */
    private static void init(ApplicationContext applicationContext) {

        context = applicationContext;
        environment = context.getEnvironment();

        if (context instanceof WebApplicationContext) {

            servletContext = ((WebApplicationContext) context).getServletContext();
        }

        messages = new MessageSourceAccessor(context, Locale.SIMPLIFIED_CHINESE);
    }

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) {

        LOGGER.info("Spring context holder initialized successful");
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM