摘要:容器管理的一般不需要了解容器的狀態(tài)和直接使用容器但是在某些情況下是需要在中直接對(duì)容器進(jìn)行操作的可以通過(guò)特定的接口來(lái)完成接口有以下這些接口名描述實(shí)現(xiàn)了這個(gè)接口的類都可以獲取到一個(gè)對(duì)象可以獲取容器中的所有在中可以得到應(yīng)用上下文的事件發(fā)布器從而可
容器管理的 Bean 一般不需要了解容器的狀態(tài)和直接使用容器, 但是在某些情況下, 是需要在 Bean 中直接對(duì)IOC容器進(jìn)行操作的, 可以通過(guò)特定的 Aware 接口來(lái)完成. aware 接口有以下這些:
接口名 | 描述 |
---|---|
ApplicationContextAware | 實(shí)現(xiàn)了這個(gè)接口的類都可以獲取到一個(gè) ApplicationContext 對(duì)象. 可以獲取容器中的所有 Bean |
ApplicationEventPublisherAware | 在 bean 中可以得到應(yīng)用上下文的事件發(fā)布器, 從而可以在Bean中發(fā)布應(yīng)用上下文的事件. |
BeanClassLoaderAware | 獲取 bean 的類加載器 |
BeanFactoryAware | 獲取 bean 的工廠 |
BeanNameAware | 獲取 bean 在容器中的名字 |
BootstrapContextAware | 獲取 BootstrapContext |
LoadTimeWeaverAware | 加載Spring Bean時(shí)織入第三方模塊, 如AspectJ |
MessageSourceAware | 主要用于獲取國(guó)際化相關(guān)接口 |
NotificationPublisherAware | 用于獲取通知發(fā)布者 |
ResourceLoaderAware | 初始化時(shí)注入ResourceLoader |
ServletConfigAware | web開(kāi)發(fā)過(guò)程中獲取ServletConfig |
ServletContextAware | web開(kāi)發(fā)過(guò)程中獲取ServletContext信息 |
這個(gè)接口比較常用, ApplicationContextAware 接口中只有一個(gè)方法, 用來(lái)獲取容器中的所有 Bean.
void setApplicationContext(ApplicationContext applicationContext) throws BeansException;
@Component public class Test implements ApplicationContextAware { @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { } }
這里提供一個(gè)常用的工具類
@Component public class SpringUtil implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setApplicationContext( ApplicationContext applicationContext) throws BeansException { SpringUtil.applicationContext = applicationContext; } public static ApplicationContext getApplicationContext() { return applicationContext; } /** * 根據(jù)Bean名稱獲取實(shí)例 * * @param name * * Bean注冊(cè)名稱 * @return bean實(shí)例 */ @SuppressWarnings("unchecked") public staticT getBean( String name) throws BeansException { return (T) applicationContext.getBean(name); } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/72463.html
摘要:代碼示例自定義實(shí)現(xiàn)注冊(cè)運(yùn)行和預(yù)想一樣,輸出結(jié)果為,如果移除掉注解的屬性,輸出結(jié)果為總結(jié)在大多數(shù)情況下,我們應(yīng)該避免使用任何接口,除非我們需要它們。 showImg(https://segmentfault.com/img/remote/1460000019807821?w=1920&h=1080); 通過(guò)如下前序兩篇文章: Spring Bean 生命周期之我從哪里來(lái)? Spring...
摘要:也是屬于方法調(diào)用棧的一環(huán),進(jìn)去有類似一段偽代碼這段代碼通過(guò)遍歷得到所有的,然后挨個(gè)執(zhí)行重寫(xiě)的方法,倘若有一個(gè)方法返回的為,那么循環(huán)就會(huì)跳出,意味著下面的方法不會(huì)被執(zhí)行。 Spring源碼原理篇--容器初始化&Bean后置處理器 本篇主要是講解IOC容器初始化過(guò)程中大體進(jìn)行了哪一些工作,以及Bean后置處理器的工作原理和BeanPostProcessor在底層的使用。 環(huán)境準(zhǔn)備 編譯器...
摘要:入門(mén)篇學(xué)習(xí)總結(jié)時(shí)間年月日星期三說(shuō)明本文部分內(nèi)容均來(lái)自慕課網(wǎng)。主要的功能是日志記錄,性能統(tǒng)計(jì),安全控制,事務(wù)處理,異常處理等等。 《Spring入門(mén)篇》學(xué)習(xí)總結(jié) 時(shí)間:2017年1月18日星期三說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)示例源碼:https://github.com/zccodere/s...個(gè)人學(xué)習(xí)源碼:https://git...
摘要:即,的后置處理器,它的作用就是在的初始化方法前跟后進(jìn)行攔截處理。如何注冊(cè)后置處理器我們暫不作分析,著重說(shuō)一下,后置處理器是如何工作的。 BeanPostProcessor即,Bean的后置處理器,它的作用就是在Bean的初始化方法前跟后進(jìn)行攔截處理。我們都知道,要想在Bean的初始化方法前后進(jìn)行工作,那必須在Bean實(shí)例創(chuàng)建完成之后,init方法執(zhí)行之前,后置處理器就已經(jīng)在容器中了,所...
摘要:簡(jiǎn)介本篇文章是容器源碼分析系列文章的最后一篇文章,本篇文章所分析的對(duì)象是方法,該方法用于對(duì)已完成屬性填充的做最后的初始化工作。后置處理器是拓展點(diǎn)之一,通過(guò)實(shí)現(xiàn)后置處理器接口,我們就可以插手的初始化過(guò)程。 1. 簡(jiǎn)介 本篇文章是Spring IOC 容器源碼分析系列文章的最后一篇文章,本篇文章所分析的對(duì)象是 initializeBean 方法,該方法用于對(duì)已完成屬性填充的 bean 做最...
閱讀 2845·2021-11-19 11:30
閱讀 3110·2021-11-15 11:39
閱讀 1884·2021-08-03 14:03
閱讀 2056·2019-08-30 14:18
閱讀 2110·2019-08-30 11:16
閱讀 2269·2019-08-29 17:23
閱讀 2660·2019-08-28 18:06
閱讀 2598·2019-08-26 12:22