91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

怎么獲取Spring的上下文環境ApplicationContext

發布時間:2021-08-14 14:18:27 來源:億速云 閱讀:201 作者:chen 欄目:開發技術

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

目錄
  • 獲取Spring上下文環境ApplicationContext

    • 分析:

    • 正確的做法是:

    • 注意:

  • Spring上下文(ApplicationContext)理解

    • 什么是Spring應用上下文呢???

    • 通過.class文件獲取bean的方法:

獲取Spring上下文環境ApplicationContext

Web項目中發現有人如此獲得Spring的上下環境:

public class SpringUtil {
       public static ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
       public static Object getBean(String serviceName){
             return context.getBean(serviceName);
       }
}

在web項目中這種方式非常不可取!!!

分析:

首先,主要意圖就是獲得Spring上下文;

其次,有了Spring上下文,希望通過getBean()方法獲得Spring管理的Bean的對象;

最后,為了方便調用,把上下文定義為static變量或者getBean方法定義為static方法;

但是,在web項目中,系統一旦啟動,web服務器會初始化Spring的上下文的,我們可以很優雅的獲得Spring的ApplicationContext對象。

如果使用

new ClassPathXmlApplicationContext("applicationContext.xml");

相當于重新初始化一遍!!!!

也就是說,重復做啟動時候的初始化工作,第一次執行該類的時候會非常耗時!!!!!

正確的做法是:

@Component
public class SpringContextUtil implements ApplicationContextAware {
         private static ApplicationContext applicationContext; // Spring應用上下文環境
         /*
          * 實現了ApplicationContextAware 接口,必須實現該方法;
          *通過傳遞applicationContext參數初始化成員變量applicationContext
          */
         public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
               SpringContextUtil.applicationContext = applicationContext;
         } 
         public static ApplicationContext getApplicationContext() {
                return applicationContext;
         }
          @SuppressWarnings("unchecked")
          public static <T> T getBean(String name) throws BeansException {
                     return (T) applicationContext.getBean(name);
           }
}

注意:

這個地方使用了Spring的注解@Component,如果不是使用annotation的方式,而是使用xml的方式管理Bean,記得寫入配置文件

<bean id="springContextUtil" class="com.ecdatainfo.util.SpringContextUtil" singleton="true" />

其實

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

這種方式獲取Sping上下文環境,最主要是在測試環境中使用,比如寫一個測試類,系統不啟動的情況下手動初始化Spring上下文再獲取對象!

Spring上下文(ApplicationContext)理解

什么是Spring應用上下文呢???

什么是應用上下文呢,應用上下文即是Spring容器的一種抽象化表述;而我們常見的ApplicationContext本質上說就是一個維護Bean定義以及對象之間協作關系的高級接口。

Spring的核心是容器,而容器并不唯一,框架本身就提供了很多個容器的實現,大概分為兩種類型:一種是不常用的BeanFactory,這是最簡單的容器,只能提供基本的DI功能;還有一種就是繼承了BeanFactory后派生而來的應用上下文,其抽象接口也就是上面提到的的ApplicationContext,它能提供更多企業級的服務,例如解析配置文本信息等等,這也是應用上下文實例對象最常見的應用場景。

有了上下文對象,我們就能向容器注冊需要Spring管理的對象了。對于上下文抽象接口,Spring也為我們提供了多種類型的容器實現,供我們在不同的應用場景選擇——

  • ① AnnotationConfigApplicationContext:從一個或多個基于java的配置類中加載上下文定義,適用于java注解的方式;

  • ② ClassPathXmlApplicationContext:從類路徑下的一個或多個xml配置文件中加載上下文定義,適用于xml配置的方式;

  • ③ FileSystemXmlApplicationContext:從文件系統下的一個或多個xml配置文件中加載上下文定義,也就是說系統盤符中加載xml配置文件;

  • ④ AnnotationConfigWebApplicationContext:專門為web應用準備的,適用于注解方式;

  • ⑤ XmlWebApplicationContext:從web應用下的一個或多個xml配置文件加載上下文定義,適用于xml配置方式。

備注:

通過.class文件獲取bean的方法:

public abstract class AbstractCreateRoomHandler implements ApplicationContextAware {
    //存放商家和處理器的映射關系
    private static final Map<Integer, Class<? extends AbstractCreateRoomHandler>> TYPE_HANDLER = new HashMap<>();
    private static ApplicationContext applicationContext;
    static {
        TYPE_HANDLER.put(BusinessCodeEnum.TUSE.getBusinessCode(), TuSeCreateRoomHandler.class);
        //todo 新的商家類型添加到此處
    }
    public static AbstractCreateRoomHandler getCreateRoomHandler(Integer productType) {
        Class<? extends AbstractCreateRoomHandler> clazz = TYPE_HANDLER.getOrDefault(productType, TuSeCreateRoomHandler.class);
        return applicationContext.getBean(clazz);
    }
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }

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

向AI問一下細節

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

AI

沁阳市| 蒲城县| 乳源| 静乐县| 泰来县| 顺昌县| 永兴县| 自贡市| 富民县| 澄江县| 宜昌市| 阿尔山市| 精河县| 铜鼓县| 侯马市| 广昌县| 三亚市| 封开县| 棋牌| 乳山市| 德昌县| 兴和县| 集贤县| 衢州市| 五寨县| 兴安盟| 大港区| 广南县| 紫阳县| 嘉义县| 银川市| 惠来县| 正蓝旗| 万源市| 社旗县| 泰兴市| 高阳县| 正阳县| 阿勒泰市| 衡山县| 包头市|