非托管類獲取Spring托管Bean的兩種方法

對(duì)于采用Spring MVC+MyBatis或其他數(shù)據(jù)庫(kù)操作框架的應(yīng)用而言,有時(shí)會(huì)遇到在普通類中獲取被Spring托管的Bean的問(wèn)題扁凛。對(duì)此,通常有兩種方法可以解決。而無(wú)論哪種方法冤今,其核心問(wèn)題都是如何獲取到定義Bean的上下文。

方法1:通過(guò)session

在可以獲取到session的類中茂缚,可以直接通過(guò)它獲取上下文戏罢。

Session session = request.getSession();
ApplicationContext ctx = WebApplicationContextUtils
                    .getRequiredWebApplicationContext(session.getServletContext());
YourBean bean = (YourBean)ctx.getBean("yourBean");

一般地屋谭,對(duì)于在聲明時(shí)未顯示聲明bean ID的類,Spring會(huì)默認(rèn)使用小駝峰法定義該類龟糕⊥┐牛可使用ctx.getBeanDefinitionNames()列出此上下文中定義的所有bean ID。

這種方式比較適合于那些B/S架構(gòu)的web應(yīng)用讲岁。

方法2:通過(guò)實(shí)現(xiàn)ApplicationContextAware接口

這種方法更加普適我擂,無(wú)論那種場(chǎng)合,都能獲取到上下文催首。具體操作如下:
首先扶踊,添加一個(gè)實(shí)現(xiàn)ApplicationContextAware接口的類;

package com.inspur.utils;

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

/**
 * spring工具類
 * 
 * @author jamie
 * @since 2016-1-27
 */
public class SpringUtil implements ApplicationContextAware {
    /**
     * 上下文
     */
    private static ApplicationContext applicationContext;

    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    public void setApplicationContext(ApplicationContext applicationContext)
            throws BeansException {
        SpringUtil.applicationContext = applicationContext;
    }

    /**
     * 根據(jù)Bean ID獲取Bean
     * 
     * @param beanId
     * @return
     */
    public static Object getBean(String beanId) {
        return applicationContext.getBean(beanId);
    }
}

然后郎任,在Spring的配置文件中添加對(duì)此工具類的聲明秧耗;

<bean id="springUtil" class="com.inspur.utils.SpringUtil"></bean> 

注意:springUtil只能獲取到和它定義在同一個(gè)上下文里的bean,換句話說(shuō)舶治,如果想用springUtil獲取某個(gè)bean分井,那么這個(gè)bean必須和springUtil同在一個(gè)上下文中,即聲明放在同一個(gè)xml文件里霉猛。

假如使用的是注解方式如@Controller尺锚、@Component等聲明的bean,那么把

<context:component-scan base-package="com.inspur.dao"/>

放到聲明springUtil的xml中即可惜浅。

最后瘫辩,在需要使用bean的類中,按如下方式獲取坛悉。

YourBean bean = (YourBean)SpringUtil.getBean("yourBean");
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末伐厌,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子裸影,更是在濱河造成了極大的恐慌挣轨,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,406評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件轩猩,死亡現(xiàn)場(chǎng)離奇詭異卷扮,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)均践,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門晤锹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人彤委,你說(shuō)我怎么就攤上這事鞭铆。” “怎么了葫慎?”我有些...
    開封第一講書人閱讀 167,815評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵衔彻,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我偷办,道長(zhǎng)艰额,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,537評(píng)論 1 296
  • 正文 為了忘掉前任椒涯,我火速辦了婚禮柄沮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘废岂。我一直安慰自己祖搓,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評(píng)論 6 397
  • 文/花漫 我一把揭開白布湖苞。 她就那樣靜靜地躺著拯欧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪财骨。 梳的紋絲不亂的頭發(fā)上镐作,一...
    開封第一講書人閱讀 52,184評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音隆箩,去河邊找鬼该贾。 笑死,一個(gè)胖子當(dāng)著我的面吹牛捌臊,可吹牛的內(nèi)容都是我干的杨蛋。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼理澎,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼逞力!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起矾端,我...
    開封第一講書人閱讀 39,668評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤掏击,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后秩铆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體砚亭,經(jīng)...
    沈念sama閱讀 46,212評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評(píng)論 3 340
  • 正文 我和宋清朗相戀三年殴玛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捅膘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,438評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡滚粟,死狀恐怖寻仗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情凡壤,我是刑警寧澤署尤,帶...
    沈念sama閱讀 36,128評(píng)論 5 349
  • 正文 年R本政府宣布耙替,位于F島的核電站,受9級(jí)特大地震影響曹体,放射性物質(zhì)發(fā)生泄漏俗扇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評(píng)論 3 333
  • 文/蒙蒙 一箕别、第九天 我趴在偏房一處隱蔽的房頂上張望铜幽。 院中可真熱鬧,春花似錦串稀、人聲如沸除抛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)到忽。三九已至,卻和暖如春清寇,著一層夾襖步出監(jiān)牢的瞬間绘趋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工颗管, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留陷遮,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,827評(píng)論 3 376
  • 正文 我出身青樓垦江,卻偏偏與公主長(zhǎng)得像帽馋,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子比吭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理绽族,服務(wù)發(fā)現(xiàn),斷路器衩藤,智...
    卡卡羅2017閱讀 134,695評(píng)論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,844評(píng)論 6 342
  • 剛上大學(xué)時(shí)赏表,有天晚上出去吃宵夜時(shí)检诗,恰巧碰上一哥們,就坐到一塊吃塊起來(lái)瓢剿。相談甚歡時(shí)逢慌,他的導(dǎo)員突然經(jīng)過(guò)。 他幾乎是被嚇...
    七秒藥水閱讀 1,029評(píng)論 0 0