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

資訊專欄INFORMATION COLUMN

第三十二章:如何獲取SpringBoot項(xiàng)目的applicationContext對(duì)象

zhangke3016 / 2815人閱讀

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

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

本章目標(biāo)

基于SpringBoot平臺(tái)完成ApplicationContext對(duì)象的獲取,并通過(guò)實(shí)例手動(dòng)獲取Spring管理的bean.

構(gòu)建項(xiàng)目

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

ApplicationContextAware

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

實(shí)現(xiàn)ApplicationContextAware接口

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

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上下文對(duì)象
 * ========================
 * Created with IntelliJ IDEA.
 * User:恒宇少年
 * Date:2017/8/26
 * Time:23:25
 * 碼云:http://git.oschina.net/jnyqy
 * ========================
 */
@Component
public class ApplicationContextProvider
    implements ApplicationContextAware
{
    /**
     * 上下文對(duì)象實(shí)例
     */
    private ApplicationContext applicationContext;

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

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

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

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

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

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

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

@Component
public class ApplicationContextProvider
    implements ApplicationContextAware
{
    /**
     * 上下文對(duì)象實(shí)例
     */
    private static ApplicationContext applicationContext;

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

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

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

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

    /**
     * 通過(guò)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就不會(huì)自動(dòng)調(diào)用setApplicationContext方法來(lái)為我們?cè)O(shè)置上下文實(shí)例。

總結(jié)

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

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

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

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

相關(guān)文章

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

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

    Ali_ 評(píng)論0 收藏0
  • 全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)Python(2021年9月)備考筆記 第十二

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

    Codeing_ls 評(píng)論0 收藏0
  • #yyds干貨盤(pán)點(diǎn)#安全管理制度管理辦法范文

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

    duan199226 評(píng)論0 收藏0
  • 三十五章:SpringBoot與單元測(cè)試小秘密

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

    hikui 評(píng)論0 收藏0
  • 三十三章:修改SpringBoot啟動(dòng)Banner

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

    firim 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<