- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) >
- springboot獲取工具類(lèi)bean過(guò)程的示例分析
小編給大家分享一下springboot獲取工具類(lèi)bean過(guò)程的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
這次的實(shí)踐經(jīng)驗的起因在于,在開(kāi)發(fā)中,我想在工具類(lèi)中使用配置文件的變量值。通常使用@value注解,這個(gè)只能在spring中管理的bean總獲取。之前我也很疑惑,為什么之前的開(kāi)發(fā)人員會(huì )在SpringUtil類(lèi)上加入@Component注解,今天又遇到這種情況,其原因完全理解了。
@Componentpublic class SpringUtil implements EnvironmentAware { private static Environment env; public static String getProperty(String key){ return env.getProperty(key); } @Override public void setEnvironment(Environment environment) { injectEnvironment(env); // 因為spring會(huì )創(chuàng )建這個(gè)接口的實(shí)現類(lèi)的一個(gè)對象,所以實(shí)例方法調用靜態(tài)方法,只是目前這個(gè)類(lèi)我們是看不到的 } public static void injectEnvironment(Environment env){ SpringUtil.env = env; // 這其實(shí)是實(shí)例方法調用靜態(tài)方法 }}
這個(gè)原理很簡(jiǎn)單,就是實(shí)例方法調用靜態(tài)方法,所以還是生成了對象,只生產(chǎn)了一個(gè)工具類(lèi)對象,而不是很多,這很java,很spring。相應的,@Service注解的也是單例(這應該是基于方法是天然并行的,每次調用方法,都會(huì )生成自己的數據棧),也可以看到,這spring中使用對象很合適,可以忽略創(chuàng )建對象的開(kāi)銷(xiāo)。
學(xué)習spring,我們都知道spring的一個(gè)重要功能就是對象管理。那么一個(gè)重要的問(wèn)題就是:我們如何獲取我們想要的Bean?spirng中有沒(méi)有一個(gè)靜態(tài)類(lèi),通過(guò)名字直接獲取對象。
很抱歉,這不是spring的正確打開(kāi)方式,雖然使用靜態(tài)類(lèi)是多么的直白,但是spring并沒(méi)這樣實(shí)現。通常的做法也是同上,就是通過(guò)spirng注入ApplicationContext對象,這就是一個(gè)bean容器,然后就可以獲得我們想要獲得的類(lèi)了。很報謙,你也無(wú)法自己new 一個(gè)ApplicationContext對象,這也許是保持運行環(huán)境中只有一個(gè)ApplicationContext對象吧。
單例就是一種簡(jiǎn)潔美。至于為什么使用單例而不使用靜態(tài)類(lèi),我覺(jué)得原因有二:
1.單例的創(chuàng )建和銷(xiāo)毀方遍,可以在不使用時(shí)節約資源
2.我們繼承的類(lèi),大多數是實(shí)例方法和實(shí)例變量(至于為甚是實(shí)例方法和實(shí)例變量,應該是很絕大多數類(lèi)都要實(shí)例化,并且可能有多個(gè)對象),那么繼承的時(shí)候就是實(shí)例方法和實(shí)例變量,可以說(shuō)這是面向對象編程風(fēng)格在單例情況下的影響。單例的缺點(diǎn)可能就是生成對象的開(kāi)銷(xiāo),現在這已經(jīng)不算什么了。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站