容器高級特性

基於上篇講的spring容器啟動流程(SPRING容器啟動過程)接下來我們講一下spring容器的高級特性:

AbstractApplicationContext類的refresh方法中,可以清楚的看到整個IOC容器的啟動流程。在容器啟動的各個環節插入響應的操作,從而實現某些高級特性。例如:InitializingBean設置初始化方法

  • 1、Bean定義生命週期方法

init()實現方式

1:實現特定的介面,InitializingBean

2:beandefinition中定義init-method等

3:@PostConstruct等註解

詳情:cnblogs.com/JKayFeng/p/

  • 2、使用BeanPostProcessor介面對受管Bean進行預處理

application.xml

BeanPostProcessor

result

結果很清晰,配置文件中的屬性已經被改變了。在初始化前後可以進行一些加工處理。可以通過該功能擴展自定義bean。

備註:

postProcessBeforeInitialization:初始化方法之前調用

postProcessAfterInitialization:初始化方法之後調用

詳情:blog.csdn.net/chensugan

3、使用BeanFactoryPostProcessor介面對BeanDefinition進行預處理

application.xml

BeanFactoryPostProcessor

Result

BeanFactoryPostProcessor:在spring容器實例化所有bean之前,通過修改beandefinition進行修改,所以通常我們可以通過實現該介面來對實例化之前的bean定義進行修改。

應用:PropertyPlaceholderConfigurer:讀取配置文件,填充佔位符

比較BeanPostProcessor

BeanPostProcessor:實例化bean後,直接修改bean,初始化前後加工

BeanFactoryPostProcessor:實例化bean之前,可直接修改BeanDefinition對bean進行加工。

詳情: elim.iteye.com/blog/238

4、FactoryBean工廠產生對象

FactoryBean

application.xml

Result

FactoryBean返回的對象不是指定類的一個實例,而是該FactoryBean的getObject方法所返回的對象。

FactoryBean一般用來創建比較複雜的對象。

應用:ProxyFactoryBean生成AOP代理對象

詳情:jianshu.com/p/6f0a59623

總結

以上四個特性均可以對baen進行加工處理,在開發過程中可以靈活的運用。其中:

init()和FactoryBean作用於單個bean, BeanPostProcessor、BeanFactoryPostProcessor是容器級別的,會加工處理本容器的所有bean

以上均為筆者個人見解,如有不當之處,請多多指教。謝謝!


推薦閱讀:
相關文章