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

SpringBoot五種獲取ApplicationContext的實現(xiàn)方式

 更新時間:2025年09月19日 09:27:58   作者:enjoy編程  
本文系統(tǒng)梳理了獲取Spring ApplicationContext的多種方式,包括創(chuàng)建工具類、實現(xiàn)ApplicationContextInitializer接口、ApplicationListener接口、啟動類配置、ApplicationContextAware接口及@Resource注解注入,提供便捷的bean獲取與容器操作方案

之前每次想要獲取Spring上下文【ApplicationContext】的時候,都去現(xiàn)查方案。

本文針對獲取Spring ApplicationContext的方式做了梳理,總結。

1. 概念

ApplicationContext是什么?

簡單來說就是Spring中的容器,可以用來獲取容器中的各種bean組件,注冊監(jiān)聽事件,加載資源文件等功能

2. 獲取ApplicationContext的方式

2.1 創(chuàng)建工具類

通過此工具類,可以方便的獲取bean組件, 獲取配置信息等

import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.core.env.Environment;

public class SpringUtil {
    private static ApplicationContext applicationContext = null;
    private static Environment environment = null;

    public static void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        if (SpringUtil.applicationContext == null) {
            SpringUtil.applicationContext = applicationContext;
            environment = applicationContext.getEnvironment();
            //TODO 設置后,可以做一些操作
        }
    }

    //獲取applicationContext
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    public static Environment getEnvironment() {
        return environment;
    }

    //通過name獲取 Bean.
    public static Object getBean(String name) {
        return getApplicationContext().getBean(name);

    }

    //通過class獲取Bean.
    public static <T> T getBean(Class<T> clazz) {
        return getApplicationContext().getBean(clazz);
    }

    //通過name,以及Clazz返回指定的Bean
    public static <T> T getBean(String name, Class<T> clazz) {
        return getApplicationContext().getBean(name, clazz);
    }

    public static String getString(String key) {
        return environment.getProperty(key);
    }

    public static int getInt(String key) {
        return NumberUtils.toInt(environment.getProperty(key));
    }

    public static long getLong(String key) {
        return NumberUtils.toLong(environment.getProperty(key));
    }

    public static boolean getBoolean(String key) {
        return BooleanUtils.toBoolean(environment.getProperty(key));
    }
}

方式1. 實現(xiàn)ApplicationContextInitializer接口

實現(xiàn)接口后,將此類注入到Spring容器中,有兩種方式。當然也可以直接調用靜態(tài)方法

  • 第一種: 在此類上加`@Component`注解
  • 第二種:在 `resources/META-INF/spring.factories`文件中添加以下配置:  org.springframework.context.ApplicationContextInitializer=CustomerApplicationContextInitializer的路徑

實現(xiàn)ApplicationContextInitializer的源碼示例:

public class CustomApplicationContextInitializer implements ApplicationContextInitializer {
  @Override
  public void initialize(ConfigurableApplicationContext applicationContext) {    
     SpringBeanUtils.setApplicationContext(applicationContext);
  }
}

方式2. 實現(xiàn)ApplicationListener接口

實現(xiàn)接口后,將此類注入到Spring容器中,有兩種方式。當然也可以直接調用靜態(tài)方法

  • 第一種: 在此類上加`@Component`注解
  • 第二種:在 `resources/META-INF/spring.factories`文件中添加以下配置:  org.springframework.context.ApplicationContextInitializer=CustomerApplicationListener的路徑

實現(xiàn)ApplicationListener的源碼示例:

public class CustomApplicationListener implements ApplicationListener<ApplicationContextEvent> {
  @Override
  public void onApplicationEvent(ApplicationContextEvent event) {        
     SpringBeanUtils.setApplicationContext(event.getApplicationContext());
  }
}

方式3. 在啟動類main方法中設置

@SpringBootApplication
@EnableSwagger2
public class Application {
    public static void main(String[] args) {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(WangMikeSpringApplication.class, args);        
        SpringBeanUtils.setApplicationContext(applicationContext);
    }
}

方式4. 實現(xiàn)ApplicationContextAware接口

@Component
public class SpringBeanUtils implements ApplicationContextAware {
    private static ApplicationContext applicationContext;
    public  void setApplicationContext(ApplicationContext applicationContext){
        SpringBeanUtils.applicationContext = applicationContext;
    }

    public static ApplicationContext getApplicationContext(
        return applicationContext;
    }
}

方式5. 直接通過@Resource注解注入

@Component
@Order(value = 1)
@Slf4j
public class AppStartRunner implements org.springframework.boot.ApplicationRunner {
    protected static Logger logger = LoggerFactory.getLogger(AppStartRunner.class);

    @Resource
    ApplicationContext applicationContext;

總結

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

相關文章

  • Java面試Logback打印日志如何獲取當前方法名稱題解

    Java面試Logback打印日志如何獲取當前方法名稱題解

    這篇文章主要為大家介紹了Java面試Logback打印日志如何獲取當前方法名稱題解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • springBoot 項目排除數(shù)據(jù)庫啟動方式

    springBoot 項目排除數(shù)據(jù)庫啟動方式

    這篇文章主要介紹了springBoot 項目排除數(shù)據(jù)庫啟動方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java數(shù)據(jù)結構學習之二叉樹

    Java數(shù)據(jù)結構學習之二叉樹

    今天給大家?guī)淼氖顷P于Java數(shù)據(jù)結構的相關知識,文章圍繞著Java二叉樹展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • java Timer 定時每天凌晨1點執(zhí)行任務

    java Timer 定時每天凌晨1點執(zhí)行任務

    這篇文章主要介紹了java Timer 定時每天凌晨1點執(zhí)行任務的代碼,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • Spring中@EnableScheduling注解的工作原理詳解

    Spring中@EnableScheduling注解的工作原理詳解

    這篇文章主要介紹了Spring中@EnableScheduling注解的工作原理詳解,@EnableScheduling是 Spring Framework 提供的一個注解,用于啟用Spring的定時任務(Scheduling)功能,需要的朋友可以參考下
    2024-01-01
  • SpringBoot統(tǒng)一功能處理示例詳解(攔截器)

    SpringBoot統(tǒng)一功能處理示例詳解(攔截器)

    這篇文章主要介紹了SpringBoot統(tǒng)一功能處理(攔截器),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • java微信延遲支付的實現(xiàn)示例

    java微信延遲支付的實現(xiàn)示例

    最近在面試的過程中總會出現(xiàn)一些關于微信支付延遲返回結果的處理方式的問題,本文主要介紹了java微信延遲支付的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • SpringCloud之Feign遠程接口映射的實現(xiàn)

    SpringCloud之Feign遠程接口映射的實現(xiàn)

    這篇文章主要介紹了SpringCloud之Feign遠程接口映射的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • 詳解Huffman編碼算法之Java實現(xiàn)

    詳解Huffman編碼算法之Java實現(xiàn)

    Huffman編碼是一種編碼方式,常用于無損壓縮。本文只介紹用Java語言來實現(xiàn)該編碼方式的算法和數(shù)據(jù)結構。有興趣的可以了解一下。
    2016-12-12
  • request.getRequestURL()等方法得到路徑的區(qū)別及說明

    request.getRequestURL()等方法得到路徑的區(qū)別及說明

    這篇文章主要介紹了request.getRequestURL()等方法得到路徑的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12

最新評論