摘要:對象是開源框架的上下文對象實例,在項目運行時自動裝載內(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
摘要:本章目標(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ā)布...
摘要:本題目的考察點在于函數(shù)的格式輸出規(guī)則。方法改變隨機數(shù)生成器的種子,可以在調(diào)用其他隨機模塊函數(shù)之前調(diào)用此函數(shù)。參數(shù)改變隨機數(shù)生成器的種子。返回一個至區(qū)間包含和的整數(shù)。 ...
摘要:第四章安全管理制度發(fā)布第十條安全管理制度必須以正式文件的形式發(fā)布施行。第十一條安全管理制度由信息安全管理小組制訂,信息安全領(lǐng)導(dǎo)小組審批發(fā)布。第二十條安全管理制度的修改與廢止須經(jīng)信息安全領(lǐng)導(dǎo)組織審批確認(rèn),信息安全管理部門備案。 字?jǐn)?shù) 3610閱讀 760評論 0贊 3《xxxx安全管理制度匯編》****制度管理辦法****文...
摘要:本章目的基于平臺整合分別完成客戶端服務(wù)端的單元測試。在測試控制器內(nèi)添加了三個測試方法,我們接下來開始編寫單元測試代碼。總結(jié)本章主要介紹了基于平臺的兩種單元測試方式,一種是在服務(wù)端采用注入方式將需要測試的或者注入到測試類中,然后調(diào)用方法即可。 單元測試對于開發(fā)人員來說是非常熟悉的,我們每天的工作也都是圍繞著開發(fā)與測試進(jìn)行的,在最早的時候測試都是采用工具Debug模式進(jìn)行調(diào)試程序,后來Ju...
摘要:本章目標(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è)計...
閱讀 2008·2019-08-29 16:27
閱讀 1377·2019-08-29 16:14
閱讀 3380·2019-08-29 14:18
閱讀 3461·2019-08-29 13:56
閱讀 1260·2019-08-29 11:13
閱讀 2128·2019-08-28 18:19
閱讀 3447·2019-08-27 10:57
閱讀 2283·2019-08-26 11:39