程序員、spring、編程、開發
吐槽
Java工作多年,天天簡單的增刪查改,spring的接口真沒接觸過
用的做多就是spring的註解,天天簡單配置配置搞定
運行原理一概不知道
接口列表
- ApplicationContextAware
- ApplicationContext
- BeanFactory
- BeanFactoryAware
- BeanNameAware
- InitializingBean
Spring Aware是什麼
Spring提供Aware接口能讓Bean感知Spring容器的存在,即讓Bean可以使用Spring容器所提供的資源。(通俗講感知資源)
我公司大神經常也搞個Aware接口,開始看的很懵逼,後來想想spring的接口,哦明白了
案例理解
ApplicationContextAware
如要獲取容器中的某個Bean,可以繼承ApplicationContextAware,讓這個Bean擁有調用容器服務的能力。
- 獲取spring上下文ApplicationContext
- 然後通過ApplicationContext的getBean方法
- 獲取到指定Bean名稱的實例
ApplicationContextAware實戰應用代碼案例
1
ApplicationContext
上面ApplicationContextAware例子已經用到了ApplicationContext
看到ApplicationContext繼承的接口就恐怖,這麼多接口
1
1
InitializingBean
InitializingBean接口為bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是繼承該接口的類,在初始化bean的時候都會執行該方法。
業務代碼場景
對bean的成員屬性進行操作如,初始化值(最頻繁),排序等等。
BeanFactoryAware
在公司代碼裡找了一圈,發現一個案例
檢查bean安全的功能,需要獲取BeanFactory
然後遍歷bean去檢查安全
private ListableBeanFactory beanFactory;
String[] strings = beanFactory.getBeanDefinitionNames();
Object object = beanFactory.getBean(beanName);
BeanFacotryAware總結
可以通過set來拿到我們要的對象,為什麼還要用這個beanFactory呢
beanFactory可以更加動態的獲取對象,傳入beanName即可
Object object = beanFactory.getBean(beanName); 通過這種方式獲取對象實例
spring接口總結
- 後綴Aware的接口都是可以拿來獲取資源的(感知資源)
- 業務Bean初始要做些動作可以利用InitializingBean
- 通過ApplicationContextAware來獲取Bean
- 通過BeanFacotryAware來獲取Bean
- 通過普通set注入來獲取Bean (獲取Bean方式不一樣,各有優點)
最後spring還有其他強大接口,以後在總結下,面試能回答3個並結合實戰代碼講已經不錯了