1. 程式人生 > >Spring 的 BeanNameAware 和 BeanFactoryAware 介面

Spring 的 BeanNameAware 和 BeanFactoryAware 介面

轉自:https://blog.csdn.net/qq_17612199/article/details/53115706

BeanNameAware

作用:讓Bean獲取自己在BeanFactory配置中的名字(根據情況是id或者name)。 
Spring自動呼叫。並且會在Spring自身完成Bean配置之後,且在呼叫任何Bean生命週期回撥(初始化或者銷燬)方法之前就呼叫這個方法。換言之,在程式中使用BeanFactory.getBean(String beanName)之前,Bean的名字就已經設定好了。

BeanFactoryAware

作用:讓Bean獲取配置他們的BeanFactory的引用。

這個方法可能是在根據某個配置檔案建立了一個新工廠之後,Spring才呼叫這個方法,並把BeanFactory注入到Bean中。 
讓bean獲取配置自己的工廠之後,當然可以在Bean中使用這個工廠的getBean()方法,但是,實際上非常不推薦這樣做,因為結果是進一步加大Bean與Spring的耦合,而且,能通過DI注入進來的儘量通過DI來注入。 
當然,除了查詢bean,BeanFactory可以提供大量其他的功能,例如銷燬singleton模式的Bean。 
factory.preInstantiateSingletons();方法。preInstantiateSingletons()方法立即例項化所有的Bean例項,有必要對這個方法和Spring載入bean的機制做個簡單說明。 
方法本身的目的是讓Spring立即處理工廠中所有Bean的定義,並且將這些Bean全部例項化。因為Spring預設例項化Bean的情況下,採用的是lazy機制,換言之,如果不通過getBean()方法(BeanFactory或者ApplicationContext的方法)獲取Bean的話,那麼為了節省記憶體將不例項話Bean,只有在Bean被呼叫的時候才例項化他們。