中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring獲取Bean的方式

發布時間:2021-07-26 22:02:27 來源:億速云 閱讀:173 作者:chen 欄目:大數據

這篇文章主要介紹“Spring獲取Bean的方式”,在日常操作中,相信很多人在Spring獲取Bean的方式問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Spring獲取Bean的方式”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

  • 在初始化時保存ApplicationContext對象

ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml"); 
ac.getBean("userService");

#比如:<bean id="userService">
  • 通過Spring提供的utils類獲取ApplicationContext對象 

ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc); 
ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc); 
ac1.getBean("beanId"); 
ac2.getBean("beanId");  

說明:這樣的方式適合于採用Spring框架的B/S系統,通過ServletContext對象獲取ApplicationContext對象。
然后在通過它獲取須要的類實例。上面兩個工具方式的差別是,前者在獲取失敗時拋出異常。后者返回null。
  • 繼承自抽象類ApplicationObjectSupport 

說明:抽象類ApplicationObjectSupport提供getApplicationContext()方法,能夠方便的獲取ApplicationContext。

Spring初始化時,會通過該抽象類的setApplicationContext(ApplicationContext context)方法將ApplicationContext 對象注入。
  • 繼承自抽象類WebApplicationObjectSupport

說明:類似上面方法。調用getWebApplicationContext()獲取WebApplicationContext
  • 實現接口ApplicationContextAware

說明:實現該接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext 對象。Spring初始化時,會通過該方法將ApplicationContext對象注入。

package com.rkhd.ienterprise.isearch.util;

import org.apache.commons.lang3.Validate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

/**
 * 以靜態變量保存Spring ApplicationContext, 可在任何代碼任何地方任何時候取出ApplicaitonContext.
 * 
 */
@Component
public class SpringContextHolder implements ApplicationContextAware , DisposableBean {

    private static ApplicationContext applicationContext = null;

    private static Logger logger = LoggerFactory.getLogger(SpringContextHolder.class);

    /**
     * 取得存儲在靜態變量中的ApplicationContext.
     */
    public static ApplicationContext getApplicationContext() {
        assertContextInjected();
        return applicationContext;
    }

    /**
     * 從靜態變量applicationContext中取得Bean, 自動轉型為所賦值對象的類型.
     */
    @SuppressWarnings("unchecked")
    public static <T> T getBean(String name) {
        assertContextInjected();
        return (T) applicationContext.getBean(name);
    }

    /**
     * 從靜態變量applicationContext中取得Bean, 自動轉型為所賦值對象的類型.
     */
    public static <T> T getBean(Class<T> requiredType) {
        assertContextInjected();
        return applicationContext.getBean(requiredType);
    }


    /**
     * 清除SpringContextHolder中的ApplicationContext為Null.
     */
    public static void clearHolder() {
        logger.debug("清除SpringContextHolder中的ApplicationContext:" + applicationContext);
        applicationContext = null;
    }

    /**
     * 實現ApplicationContextAware接口, 注入Context到靜態變量中.
     * @param applicationContext
     * @throws BeansException
     */
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {

        logger.debug("注入ApplicationContext到SpringContextHolder:{}", applicationContext);

        if (SpringContextHolder.applicationContext != null) {
            logger.warn("SpringContextHolder中的ApplicationContext被覆蓋, 原有ApplicationContext為:"
                    + SpringContextHolder.applicationContext);
        }

        SpringContextHolder.applicationContext = applicationContext; //NOSONAR

    }

    /**
     * 實現DisposableBean接口, 在Context關閉時清理靜態變量.
     * @throws Exception
     */
    @Override
    public void destroy() throws Exception {

    }

    /**
     * 檢查ApplicationContext不為空.
     */
    private static void assertContextInjected() {
        Validate.validState(applicationContext != null,
                "applicaitonContext屬性未注入, 請在applicationContext.xml中定義SpringContextHolder.");
    }
}
  • 通過Spring提供的ContextLoader

WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
wac.getBean(beanID);

到此,關于“Spring獲取Bean的方式”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

双流县| 象州县| 五峰| 河源市| 温州市| 南华县| 永登县| 阿拉善盟| 阿鲁科尔沁旗| 辽阳县| 景泰县| 定南县| 九江市| 榕江县| 长春市| 治县。| 仁寿县| 察隅县| 宁海县| 淮阳县| 开阳县| 怀柔区| 太仆寺旗| 兰溪市| 莱西市| 隆安县| 永登县| 克拉玛依市| 伊春市| 都昌县| 乌海市| 景东| 凉山| 息烽县| 开原市| 遵化市| 凯里市| 诸城市| 台北县| 南召县| 乌拉特中旗|