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