最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

獲取Spring的上下文環(huán)境ApplicationContext的最簡單方式

 更新時間:2021年08月14日 10:06:21   作者:藍魔830  
這篇文章主要介紹了獲取Spring的上下文環(huán)境ApplicationContext的最簡單方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

獲取Spring上下文環(huán)境ApplicationContext

Web項目中發(fā)現(xiàn)有人如此獲得Spring的上下環(huán)境:

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

在web項目中這種方式非常不可?。。。?/p>

分析:

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

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

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

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

如果使用

new ClassPathXmlApplicationContext("applicationContext.xml");

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

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

正確的做法是:

@Component
public class SpringContextUtil implements ApplicationContextAware {
         private static ApplicationContext applicationContext; // Spring應用上下文環(huán)境
         /*
          * 實現(xiàn)了ApplicationContextAware 接口,必須實現(xiàn)該方法;
          *通過傳遞applicationContext參數(shù)初始化成員變量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上下文環(huán)境,最主要是在測試環(huán)境中使用,比如寫一個測試類,系統(tǒng)不啟動的情況下手動初始化Spring上下文再獲取對象!

Spring上下文(ApplicationContext)理解

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

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

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

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

  • ① AnnotationConfigApplicationContext:從一個或多個基于java的配置類中加載上下文定義,適用于java注解的方式;
  • ② ClassPathXmlApplicationContext:從類路徑下的一個或多個xml配置文件中加載上下文定義,適用于xml配置的方式;
  • ③ FileSystemXmlApplicationContext:從文件系統(tǒng)下的一個或多個xml配置文件中加載上下文定義,也就是說系統(tǒng)盤符中加載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;
    }

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • why在重寫equals時還必須重寫hashcode方法分享

    why在重寫equals時還必須重寫hashcode方法分享

    首先我們先來看下String類的源碼:可以發(fā)現(xiàn)String是重寫了Object類的equals方法的,并且也重寫了hashcode方法
    2013-10-10
  • Java源碼解析重寫鎖的設計結構和細節(jié)

    Java源碼解析重寫鎖的設計結構和細節(jié)

    這篇文章主要為大家介紹了Java源碼解析重寫鎖的設計結構和細節(jié),這小節(jié)我們以共享鎖作為案列,自定義一個共享鎖。有需要的朋友可以借鑒參考下
    2022-03-03
  • Java8優(yōu)雅的字符串拼接工具類StringJoiner實例代碼

    Java8優(yōu)雅的字符串拼接工具類StringJoiner實例代碼

    這篇文章主要給大家介紹了關于Java8優(yōu)雅的字符串拼接工具類StringJoiner的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • java中@ModelAttribute注解的作用

    java中@ModelAttribute注解的作用

    本文主要介紹了java中@ModelAttribute注解的作用。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • Java中數(shù)學相關類的使用教程

    Java中數(shù)學相關類的使用教程

    Java是一種廣泛使用的編程語言,它提供了許多數(shù)學運算的函數(shù)和方法,使得開發(fā)者可以輕松地進行各種數(shù)學計算,下面這篇文章主要給大家介紹了關于Java中數(shù)學相關類使用的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • 使用IDEA反編譯沒有擦除泛型的原因解析

    使用IDEA反編譯沒有擦除泛型的原因解析

    Java泛型引入至今已有近20年,“偽泛型”已被認為是所有開發(fā)者的共識,沒有必要再在反編譯后體現(xiàn)出來反倒大大降低了可讀性,這篇文章主要介紹了使用IDEA反編譯沒有擦除泛型的原因解析,需要的朋友可以參考下
    2023-05-05
  • Spring?bean配置單例或多例模式方式

    Spring?bean配置單例或多例模式方式

    這篇文章主要介紹了Spring?bean配置單例或多例模式方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java必須掌握的 4 大基礎

    Java必須掌握的 4 大基礎

    我們一直在學習Java,但Java中總有一些概念含混不清,不論是對初級還是高級程序員都是如此。所以,這篇文章的目的就是弄清楚這些概念,需要的小伙伴可以參考以下喲
    2021-09-09
  • struts2靜態(tài)資源映射代碼示例

    struts2靜態(tài)資源映射代碼示例

    這篇文章主要介紹了struts2靜態(tài)資源映射的相關內(nèi)容,涉及了具體代碼示例,具有一定參考價值,需要的朋友可以了解下。
    2017-09-09
  • IDEA Maven 配置備忘筆記

    IDEA Maven 配置備忘筆記

    這篇文章主要介紹了IDEA Maven 配置備忘筆記,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09

最新評論

连平县| 湖口县| 西青区| 松潘县| 通海县| 龙江县| 西乡县| 隆回县| 磴口县| 志丹县| 金溪县| 六枝特区| 永兴县| 永济市| 抚远县| 尉氏县| 翁源县| 安阳市| 三台县| 桓仁| 石狮市| 花垣县| 华容县| 永清县| 琼中| 阿克陶县| 临桂县| 闸北区| 乌鲁木齐县| 武安市| 潞西市| 治多县| 平原县| 大新县| 桐乡市| 武宣县| 镇远县| 雷山县| 连城县| 柳林县| 铜梁县|