摘要:對(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
摘要:本章目標(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ā)布...
摘要:本題目的考察點(diǎn)在于函數(shù)的格式輸出規(guī)則。方法改變隨機(jī)數(shù)生成器的種子,可以在調(diào)用其他隨機(jī)模塊函數(shù)之前調(diào)用此函數(shù)。參數(shù)改變隨機(jī)數(shù)生成器的種子。返回一個(gè)至區(qū)間包含和的整數(shù)。 ...
摘要:第四章安全管理制度發(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安全管理制度匯編》****制度管理辦法****文...
摘要:本章目的基于平臺(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...
摘要:本章目標(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ì)...
閱讀 2001·2019-08-29 16:27
閱讀 1370·2019-08-29 16:14
閱讀 3372·2019-08-29 14:18
閱讀 3455·2019-08-29 13:56
閱讀 1252·2019-08-29 11:13
閱讀 2118·2019-08-28 18:19
閱讀 3439·2019-08-27 10:57
閱讀 2273·2019-08-26 11:39