基於上篇講的spring容器啟動流程(SPRING容器啟動過程)接下來我們講一下spring容器的高級特性:
AbstractApplicationContext類的refresh方法中,可以清楚的看到整個IOC容器的啟動流程。在容器啟動的各個環節插入響應的操作,從而實現某些高級特性。例如:InitializingBean設置初始化方法
init()實現方式
1:實現特定的介面,InitializingBean
2:beandefinition中定義init-method等
3:@PostConstruct等註解
詳情:http://www.cnblogs.com/JKayFeng/p/5974104.html
application.xml
BeanPostProcessor
result
結果很清晰,配置文件中的屬性已經被改變了。在初始化前後可以進行一些加工處理。可以通過該功能擴展自定義bean。
備註:
postProcessBeforeInitialization:初始化方法之前調用
postProcessAfterInitialization:初始化方法之後調用
詳情:http://blog.csdn.net/chensugang/article/details/3423650
3、使用BeanFactoryPostProcessor介面對BeanDefinition進行預處理
BeanFactoryPostProcessor
Result
BeanFactoryPostProcessor:在spring容器實例化所有bean之前,通過修改beandefinition進行修改,所以通常我們可以通過實現該介面來對實例化之前的bean定義進行修改。
應用:PropertyPlaceholderConfigurer:讀取配置文件,填充佔位符
比較BeanPostProcessor
BeanPostProcessor:實例化bean後,直接修改bean,初始化前後加工
BeanFactoryPostProcessor:實例化bean之前,可直接修改BeanDefinition對bean進行加工。
詳情: http://elim.iteye.com/blog/2387018
4、FactoryBean工廠產生對象
FactoryBean
FactoryBean返回的對象不是指定類的一個實例,而是該FactoryBean的getObject方法所返回的對象。
FactoryBean一般用來創建比較複雜的對象。
應用:ProxyFactoryBean生成AOP代理對象
詳情:https://www.jianshu.com/p/6f0a59623090
以上四個特性均可以對baen進行加工處理,在開發過程中可以靈活的運用。其中:
以上均為筆者個人見解,如有不當之處,請多多指教。謝謝!