国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

第三十二章:如何獲取SpringBoot項目的applicationContext對象

zhangke3016 / 2821人閱讀

摘要:對象是開源框架的上下文對象實例,在項目運行時自動裝載內(nèi)的所有信息到內(nèi)存。總結(jié)本章內(nèi)容較少,主要講解了平臺下采用的方式完成實例的獲取,并通過實例完成對管理的實例手動獲取。

ApplicationContext對象是Spring開源框架的上下文對象實例,在項目運行時自動裝載Handler內(nèi)的所有信息到內(nèi)存。傳統(tǒng)的獲取方式有很多種,不過隨著Spring版本的不斷迭代,官方也慢慢的不建議使用部分方式。下面我簡單介紹一種Spring官方推薦使用的方式!

本章目標(biāo)

基于SpringBoot平臺完成ApplicationContext對象的獲取,并通過實例手動獲取Spring管理的bean.

構(gòu)建項目

本章項目不需要太多的內(nèi)容,添加Web依賴就可以了。

ApplicationContextAware

這個接口對象就是我們今天的主角,其實以實現(xiàn)ApplicationContextAware接口的方式獲取ApplicationContext對象實例并不是SpringBoot特有的功能,早在Spring3.0x版本之后就存在了這個接口,在傳統(tǒng)的Spring項目內(nèi)同樣是可以獲取到ApplicationContext實例的,下面我們看看該如何編碼才能達(dá)到我們的效果呢?

實現(xiàn)ApplicationContextAware接口

創(chuàng)建一個實體類并實現(xiàn)ApplicationContextAware接口,重寫接口內(nèi)的setApplicationContext方法來完成獲取ApplicationContext實例的方法,代碼如下所示:

package com.xunmei.api;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

/**
 * 獲取Spring上下文對象
 * ========================
 * Created with IntelliJ IDEA.
 * User:恒宇少年
 * Date:2017/8/26
 * Time:23:25
 * 碼云:http://git.oschina.net/jnyqy
 * ========================
 */
@Component
public class ApplicationContextProvider
    implements ApplicationContextAware
{
    /**
     * 上下文對象實例
     */
    private ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }

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

    /**
     * 通過name獲取 Bean.
     * @param name
     * @return
     */
    public Object getBean(String name){
        return getApplicationContext().getBean(name);
    }

    /**
     * 通過class獲取Bean.
     * @param clazz
     * @param 
     * @return
     */
    public  T getBean(Class clazz){
        return getApplicationContext().getBean(clazz);
    }

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

我們拿到ApplicationContext對象實例后就可以手動獲取Bean的注入實例對象,在ApplicationContextProvider類內(nèi)我簡單的實現(xiàn)了幾個方法來獲取指定的Bean實例,當(dāng)然你可以添加更多的方法來完成更多的業(yè)務(wù)邏輯。

如果你是想在非Spring管理的實體內(nèi)使用ApplicationContext還不想采用注入ApplicationContextProvider來完成實例化,這時我們可以修改ApplicationContext實例對象為靜態(tài)實例,方法改為靜態(tài)方法,這樣在外部同樣是可以獲取到指定Bean的實例。如下所示:

@Component
public class ApplicationContextProvider
    implements ApplicationContextAware
{
    /**
     * 上下文對象實例
     */
    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }

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

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

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

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

這里要注意ApplicationContextProvider類上的@Component注解是不可以去掉的,去掉后Spring就不會自動調(diào)用setApplicationContext方法來為我們設(shè)置上下文實例。

總結(jié)

本章內(nèi)容較少,主要講解了SpringBoot平臺下采用ApplicationContextAware的方式完成ApplicationContext實例的獲取,并通過ApplicationContext實例完成對Spring管理的Bean實例手動獲取。

SpringBoot相關(guān)系列文章請訪問:目錄:SpringBoot學(xué)習(xí)目錄
QueryDSL相關(guān)系列文章請訪問:QueryDSL通用查詢框架學(xué)習(xí)目錄
SpringDataJPA相關(guān)系列文章請訪問:目錄:SpringDataJPA學(xué)習(xí)目錄
感謝閱讀!
歡迎加入QQ技術(shù)交流群,共同進(jìn)步。
QQ技術(shù)交流群

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/67662.html

相關(guān)文章

  • 三十六章:基于SpringBoot架構(gòu)重寫SpringMVC請求參數(shù)裝載

    摘要:本章目標(biāo)根據(jù)項目定制參數(shù)狀態(tài)并了解的裝載過程以及實現(xiàn)方式。創(chuàng)建測試控制器創(chuàng)建名為的控制器并添加數(shù)據(jù)提交的方法,具體代碼如下所示表單提交控制器恒宇少年碼云裝載參數(shù)測試教師名稱, 在國內(nèi)企業(yè)開發(fā)項目中大多數(shù)都已經(jīng)偏向Spring家族式的開發(fā)風(fēng)格,在前幾年國內(nèi)項目都是以Structs2作為Web開發(fā)的主導(dǎo),不過由于近幾年發(fā)生的事情確實讓開發(fā)者對它失去了以往的信心。與此同時Spring家族發(fā)布...

    Ali_ 評論0 收藏0
  • 全國計算機等級考試二級Python(2021年9月)備考筆記 第十二

    摘要:本題目的考察點在于函數(shù)的格式輸出規(guī)則。方法改變隨機數(shù)生成器的種子,可以在調(diào)用其他隨機模塊函數(shù)之前調(diào)用此函數(shù)。參數(shù)改變隨機數(shù)生成器的種子。返回一個至區(qū)間包含和的整數(shù)。 ...

    Codeing_ls 評論0 收藏0
  • #yyds干貨盤點#安全管理制度管理辦法范文

    摘要:第四章安全管理制度發(fā)布第十條安全管理制度必須以正式文件的形式發(fā)布施行。第十一條安全管理制度由信息安全管理小組制訂,信息安全領(lǐng)導(dǎo)小組審批發(fā)布。第二十條安全管理制度的修改與廢止須經(jīng)信息安全領(lǐng)導(dǎo)組織審批確認(rèn),信息安全管理部門備案。 字?jǐn)?shù) 3610閱讀 760評論 0贊 3《xxxx安全管理制度匯編》****制度管理辦法****文...

    duan199226 評論0 收藏0
  • 三十五章:SpringBoot與單元測試小秘密

    摘要:本章目的基于平臺整合分別完成客戶端服務(wù)端的單元測試。在測試控制器內(nèi)添加了三個測試方法,我們接下來開始編寫單元測試代碼。總結(jié)本章主要介紹了基于平臺的兩種單元測試方式,一種是在服務(wù)端采用注入方式將需要測試的或者注入到測試類中,然后調(diào)用方法即可。 單元測試對于開發(fā)人員來說是非常熟悉的,我們每天的工作也都是圍繞著開發(fā)與測試進(jìn)行的,在最早的時候測試都是采用工具Debug模式進(jìn)行調(diào)試程序,后來Ju...

    hikui 評論0 收藏0
  • 三十三章:修改SpringBoot啟動Banner

    摘要:本章目標(biāo)修改啟動內(nèi)容構(gòu)建項目本章不涉及業(yè)務(wù)邏輯相關(guān)內(nèi)容,簡單創(chuàng)建一個框架即可。的隱藏隱藏的方式提供了兩種,不過其中方式已經(jīng)被拋棄掉了,我們下面介紹下修改配置的方式。 Banner是SpringBoot框架一個特色的部分,其設(shè)計的目的無非就是一個框架的標(biāo)識,其中包含了版本號、框架名稱等內(nèi)容,既然SpringBoot為我們提供了這個模塊,它肯定也是可以更換的這也是Spring開源框架的設(shè)計...

    firim 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<