IOC基礎
- Inversion of controller 控制反轉, 擁有對象創建的控制權與對象生命週期的管理權.
BeanFactory與ApplicationContext區別
- BeanFactory容器是頂層接口,定義一些基礎功能與基礎規範, 而ApplicationContext 容器是高級接口也是BeanFactory的子接口.
- ApplicationContext擁有更多的功能, 國際化、資源文件讀取、類列表展示
Bean的作用範圍與生命週期
- 作用範圍與生命週期的關係, 作用範圍決定了他的生命週期
作用範圍
- singleton、property、request、session、application、websocket
- singleton(單例模式)與property(多例模式)使用較多; singleton生命週期為程序啓動時到結束、property生命週期為當其使用時創建新對象.
高級特性
延遲加載
- ApplicationContext在實例化的時候也會將singleton objects 提前實例化. 提前實例化意味着作為初始化的一部分. 如果不想讓某一singleton object 提前被實例化, 可以標識為懶加載(lazy)
- 開啓延遲加載一定程度提高容器啓動和運轉性能
- 對於不常使用的 Bean 設置延遲加載,這樣偶爾使用的時候再加載,不必要從一開始該 Bean 就佔 用資源
FactoryBean與BeanFactory
- FactoryBean生成某種類的工具類. 而BeanFactory是容器的頂級接口
- spring中存在兩種Bean, 普通Bean與FactoryBean
- FactoryBean可以生成某一個類型的Bean實例(返回給我們)
後置處理
- 兩種後置處理Bean的接口, BeanFactoryPostProcessor和BeanPostProcessor
循環依賴
- 循環引用, 也就是兩個或兩個以上的Bean互相持有對方, 最終形成閉環.
- 構造器依賴與屬性依賴; 構造器依賴是無法解決的, 只能拋出beanCurrentlyCreationException異常, 在解決這個循環依賴的問題時, spring採用的是提前暴露對象的方法. 通過三級緩存的方式.