提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔
文章目錄
- 1.Spring Bean
- 1.1 什么是 Bean
- 簡而言之,==bean 是由 Spring IoC 容器實例化、組裝和管理的對象==。
- 1.2 Spring框架管理Bean對象的優勢
- 2.Bean的生命周期
- ==實例化 -> 屬性賦值 -> 初始化 -> 銷毀==
- 1.實例化Bean
- 2. Bean屬性填充
- 3.初始化Bean操作
- 初始化階段又可以分為幾個步驟:
- 4.銷毀Bean
1.Spring Bean
1.1 什么是 Bean
我們來看下 Spring Framework 的官方文檔:
In Spring, the objects that form the backbone of your application and that are managed by the Spring IoC container are called beans. A bean is an object that is instantiated, assembled, and otherwise managed by a Spring IoC container. Otherwise, a bean is simply one of many objects in your application. Beans, and the dependencies among them, are reflected in the configuration metadata used by a container.
簡而言之,bean 是由 Spring IoC 容器實例化、組裝和管理的對象。
1.2 Spring框架管理Bean對象的優勢
2.Bean的生命周期
Spring Bean 的生命周期來說:
- 實例化 Instantiation
- 屬性賦值 Populate
- 初始化 Initialization
- 銷毀 Destruction
實例化 -> 屬性賦值 -> 初始化 -> 銷毀
Spring中的bean的生命周期主要包含四個階段:實例化Bean --> Bean屬性填充 --> 初始化Bean -->銷毀Bean
1.實例化Bean
- 首先是實例化Bean,當客戶向容器請求一個尚未初始化的bean時,或初始化bean的時候需要注入另一個尚末初始化的依賴時,容器就會調用doCreateBean()方法進行實例化,實際上就是通過反射的方式創建出一個bean對象
2. Bean屬性填充
- Bean實例創建出來后,接著調用populateBean()DI注入 設置對象屬性值,也就是注入這個Bean依賴的其它bean對象(循環依賴 三級緩存)
3.初始化Bean操作
初始化階段又可以分為幾個步驟:
- 執行Aware接口的方法
- BeanPostProcessor的前置處理方法postProcessBeforelnitialization()
- 戶自定義的初始化方法,如init-method
- BeanPostProcessor的后置處理方法postProcessAfterinitialization()
1.執行Aware接口的方法,Spring會檢測該對象是否實現了xxxAware接口,通過Aware類型的接口,可以讓我們拿到Spring容器的些資源。
- 如果Bean實現了BeanNameAware接口的話,Spring將Bean的Id傳遞給setBeanName()方法
- 如果Bean實現了BeanFactoryAware接口的話,Spring將調用setBeanFactory()方法,將BeanFactory容器實例傳入
- 如果Bean實現了ApplicationContextAware接口的話,Spring將調用Bean的setApplicationContext()方法,將bean所在應用上下文引用傳入進來。
2.執行BeanPostProcessor的前置處理方法postProcessBeforelnitialization(),對Bean進行一些自定義的前置處理
- 判斷Bean是否實現了InitializingBean接口,如果實現了,將會執行lnitializingBean的afeterPropertiesSet()初始化方法;
3.執行用戶自定義的初始化方法,如init-method等;
4.執行BeanPostProcessor的后置處理方法postProcessAfterinitialization()
- AOP的實現代理對象
4.銷毀Bean
初始化完成后,Bean就成功創建了,之后就可以使用這個Bean, 當Bean不再需要時,會進行銷毀操作,
- 首先判斷Bean是否實現了DestructionAwareBeanPostProcessor接口,如果實現了,則會執行DestructionAwareBeanPostProcessor后置處理器的銷毀回調方法
- 其次會判斷Bean是否實現了DisposableBean接口,如果實現了將會調用其實現的destroy()方法
- 最后判斷這個Bean是否配置了dlestroy-method等自定義的銷毀方法,如果有的話,則會自動調用其配置的銷毀方法