Spring實(shí)現(xiàn)Aware接口自定義獲取bean的兩種方式
在使用spring編程時(shí),常常會(huì)遇到想根據(jù)bean的名稱來(lái)獲取相應(yīng)的bean對(duì)象,這時(shí)候,就可以通過(guò)實(shí)現(xiàn)BeanFactoryAware來(lái)滿足需求,代碼很簡(jiǎn)單:
@Servicepublic class BeanFactoryHelper implements BeanFactoryAware { private static BeanFactory beanFactory; @Override public void setBeanFactory(BeanFactory beanFactory) throws BeansException { this.beanFactory = beanFactory; } public static Object getBean(String beanName){ if(beanFactory == null){ throw new NullPointerException("BeanFactory is null!"); } return beanFactory.getBean(beanName); } }
還有一種方式是實(shí)現(xiàn)ApplicationContextAware接口,代碼也很簡(jiǎn)單:
@Service public class ApplicationContextHelper implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } public static Object getBean(String beanName){ if(applicationContext == null){ throw new NullPointerException("ApplicationContext is null!"); } return applicationContext.getBean(beanName); } }
上面兩種方法,只有容器啟動(dòng)的時(shí)候,才會(huì)把 BeanFactory 和 ApplicationContext 注入到自定義的helper類中,如果在本地junit測(cè)試的時(shí)候,如果需要根據(jù)bean的名稱獲取bean對(duì)象,則可以通過(guò)ClassPathXmlApplicationContext來(lái)獲取一個(gè)ApplicationContext,代碼如下:
@Test public void test() throws SQLException { //通過(guò)從classpath中加載spring-mybatis.xml實(shí)現(xiàn)bean的獲取 ApplicationContext context = new ClassPathXmlApplicationContext("spring-mybatis.xml"); IUserService userService = (IUserService) context.getBean("userService"); User user = new User(); user.setName("test"); user.setAge(20); userService.addUser(user); }
總結(jié)
以上就是小編分享給大家的Java編程實(shí)現(xiàn)Aware接口自定義獲取bean的兩種方式的全部?jī)?nèi)容,希望對(duì)大家有所幫助。如果有什么問(wèn)題,可以留言,小編會(huì)及時(shí)回復(fù)大家。感謝大家對(duì)本站的支持!
相關(guān)文章
spring中BeanUtils.copyProperties的使用(深拷貝,淺拷貝)
本文主要介紹了spring中BeanUtils.copyProperties的使用(深拷貝,淺拷貝),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05零基礎(chǔ)寫(xiě)Java知乎爬蟲(chóng)之進(jìn)階篇
前面幾篇文章,我們都是簡(jiǎn)單的實(shí)現(xiàn)了java爬蟲(chóng)抓取內(nèi)容的問(wèn)題,那么如果遇到復(fù)雜情況,我們還能繼續(xù)那么做嗎?答案當(dāng)然是否定的,之前的僅僅是入門篇,都是些基礎(chǔ)知識(shí),給大家練手用的,本文我們就來(lái)點(diǎn)高大上的東西2014-11-11java+MongoDB實(shí)現(xiàn)存圖片、下載圖片的方法示例
這篇文章主要介紹了java+MongoDB實(shí)現(xiàn)存圖片、下載圖片的方法,結(jié)合實(shí)例形式詳細(xì)分析了java結(jié)合MongoDB實(shí)現(xiàn)圖片的存儲(chǔ)與下載相關(guān)操作技巧,需要的朋友可以參考下2019-09-09Java實(shí)現(xiàn)網(wǎng)絡(luò)文件下載以及下載到指定目錄
在Spring框架中,StreamUtils和FileCopyUtils兩個(gè)工具類提供了方便的文件下載功能,它們都屬于org.springframework.util包,可以通過(guò)簡(jiǎn)單的方法調(diào)用實(shí)現(xiàn)文件流的復(fù)制和下載,這些工具類支持多種參數(shù)傳遞,涵蓋了文件下載的多種場(chǎng)景2024-09-09頁(yè)面的緩存與不緩存設(shè)置及html頁(yè)面中meta的作用
這篇文章主要介紹了頁(yè)面的緩存與不緩存設(shè)置及html頁(yè)面中meta的作用的相關(guān)資料,需要的朋友可以參考下2016-05-05java SpringBoot自定義注解,及自定義解析器實(shí)現(xiàn)對(duì)象自動(dòng)注入操作
這篇文章主要介紹了java SpringBoot自定義注解,及自定義解析器實(shí)現(xiàn)對(duì)象自動(dòng)注入操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08Java實(shí)現(xiàn)差分?jǐn)?shù)組的示例詳解
差分?jǐn)?shù)組是由原數(shù)組進(jìn)化而來(lái),值為原數(shù)組當(dāng)前位置值減去上一個(gè)位置的值。本文將通過(guò)例題詳解如何利用Java實(shí)現(xiàn)差分?jǐn)?shù)組,需要的可以參考一下2022-06-06