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