欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

Web項(xiàng)目中發(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項(xiàng)目中這種方式非常不可取?。?!

分析:

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

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

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

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

如果使用

new ClassPathXmlApplicationContext("applicationContext.xml");

相當(dāng)于重新初始化一遍?。。。?/p>

也就是說,重復(fù)做啟動(dòng)時(shí)候的初始化工作,第一次執(zhí)行該類的時(shí)候會非常耗時(shí)?。。。。?/p>

正確的做法是:

@Component
public class SpringContextUtil implements ApplicationContextAware {
         private static ApplicationContext applicationContext; // Spring應(yīng)用上下文環(huán)境
         /*
          * 實(shí)現(xiàn)了ApplicationContextAware 接口,必須實(shí)現(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);
           }
}

注意:

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

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

其實(shí)

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

這種方式獲取Sping上下文環(huán)境,最主要是在測試環(huán)境中使用,比如寫一個(gè)測試類,系統(tǒng)不啟動(dòng)的情況下手動(dòng)初始化Spring上下文再獲取對象!

Spring上下文(ApplicationContext)理解

什么是Spring應(yīng)用上下文呢???

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

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

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

  • ① AnnotationConfigApplicationContext:從一個(gè)或多個(gè)基于java的配置類中加載上下文定義,適用于java注解的方式;
  • ② ClassPathXmlApplicationContext:從類路徑下的一個(gè)或多個(gè)xml配置文件中加載上下文定義,適用于xml配置的方式;
  • ③ FileSystemXmlApplicationContext:從文件系統(tǒng)下的一個(gè)或多個(gè)xml配置文件中加載上下文定義,也就是說系統(tǒng)盤符中加載xml配置文件;
  • ④ AnnotationConfigWebApplicationContext:專門為web應(yīng)用準(zhǔn)備的,適用于注解方式;
  • ⑤ XmlWebApplicationContext:從web應(yīng)用下的一個(gè)或多個(gè)xml配置文件加載上下文定義,適用于xml配置方式。

備注:

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

public abstract class AbstractCreateRoomHandler implements ApplicationContextAware {
    //存放商家和處理器的映射關(guān)系
    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;
    }

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

相關(guān)文章

  • java實(shí)現(xiàn)OpenGL ES紋理映射的方法

    java實(shí)現(xiàn)OpenGL ES紋理映射的方法

    這篇文章主要介紹了java實(shí)現(xiàn)OpenGL ES紋理映射的方法,以實(shí)例形式較為詳細(xì)的分析了紋理映射的實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-06-06
  • SpringBoot全局處理統(tǒng)一返回類型方式

    SpringBoot全局處理統(tǒng)一返回類型方式

    這篇文章主要介紹了SpringBoot全局處理統(tǒng)一返回類型方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 你真的了解java單例模式了嗎?

    你真的了解java單例模式了嗎?

    這篇文章主要介紹了你真的了解java單例模式了嗎?實(shí)際上單例模式有著好幾個(gè)變種,并且多線程中涉及到線程安全問題,,需要的朋友可以參考下
    2019-06-06
  • SpringBoot?Application核心注解詳解

    SpringBoot?Application核心注解詳解

    進(jìn)入到@SpringBootApplication的源碼,可以看到里面組合了三個(gè)我們感興趣的注解@ComponentScan、@EnableAutoConfiguration、@SpringBootConfiguration,我們一一分析這三個(gè)注解
    2022-10-10
  • java 數(shù)據(jù)結(jié)構(gòu)與算法 (快速排序法)

    java 數(shù)據(jù)結(jié)構(gòu)與算法 (快速排序法)

    這篇文章主要介紹了java 數(shù)據(jù)結(jié)構(gòu)與算法(快速排序法),,快速排序法是實(shí)踐中的一種快速的排序算法,在c++或?qū)ava基本類型的排序中特別有用,下面我們一起進(jìn)入文章學(xué)習(xí)更詳細(xì)的內(nèi)容吧,需要的朋友可以參考下
    2022-02-02
  • Java之ThreadPoolExecutor類詳解

    Java之ThreadPoolExecutor類詳解

    這篇文章主要介紹了Java之ThreadPoolExecutor類詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Spring Security 構(gòu)建rest服務(wù)實(shí)現(xiàn)rememberme 記住我功能

    Spring Security 構(gòu)建rest服務(wù)實(shí)現(xiàn)rememberme 記住我功能

    這篇文章主要介紹了Spring Security 構(gòu)建rest服務(wù)實(shí)現(xiàn)rememberme 記住我功能,需要的朋友可以參考下
    2018-03-03
  • Mybatis-Plus樂觀鎖配置流程

    Mybatis-Plus樂觀鎖配置流程

    這篇文章主要介紹了Mybatis-Plus樂觀鎖配置使用流程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作有一定的參考學(xué)習(xí)價(jià)值,感興趣的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2024-01-01
  • Java?精煉解讀數(shù)據(jù)結(jié)構(gòu)的順序表如何操作

    Java?精煉解讀數(shù)據(jù)結(jié)構(gòu)的順序表如何操作

    程序中經(jīng)常需要將一組數(shù)據(jù)元素作為整體管理和使用,需要?jiǎng)?chuàng)建這種元素組,用變量記錄它們,傳進(jìn)傳出函數(shù)等。一組數(shù)據(jù)中包含的元素個(gè)數(shù)可能發(fā)生變化,順序表則是將元素順序地存放在一塊連續(xù)的存儲區(qū)里,元素間的順序關(guān)系由它們的存儲順序自然表示
    2022-03-03
  • java實(shí)現(xiàn)簡單的加減乘除計(jì)算器

    java實(shí)現(xiàn)簡單的加減乘除計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡單的加減乘除計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09

最新評論