當前位置:
首頁 > 最新 > Spring IoC之bean生命周期及相關介面使用

Spring IoC之bean生命周期及相關介面使用

本文主要講Spring IoC容器初始化bean的完整過程。


1.bean生命周期

下圖為IoC容器中bean的生命周期圖:

2.相關介面使用

bean生命周期圖中相關方法根據作用域可分三類:

容器級:

BeanFactoryPostProcessor、BeanPostProcessor和InstantiationAwareBeanPostProcessor都是容器初始化bean時提供的可擴展介面,也叫後置處理器。

Bean級:

1)實現介面BeanNameAware、BeanFactoryAware、InitializingBean和DiposableBean;

2)指定自身方法:init-method, destroy-method

註:

實現BeanNameAware可獲取容器中該bean的beanName

實現BeanFactoryAware可獲取該bean所在的容器(進而可根據beanName獲取該容器中其他的bean及beanDefinition)

初始化bean時特殊處理:

1)使用java提供的@PostConstruct註解標記指定方法

2)實現spring提供的InitializingBean介面的afterPropertiesSet方法

3)在applicationContext.xml中bean節點的屬性init-method中指定方法

(執行順序為:構造方法 -> @PostConstruct -> afterPropertiesSet -> init-method)

銷毀bean時特殊處理:

1)使用java提供的@PreDestroy註解標記指定方法

2)實現spring提供的DisposableBean介面的destroy方法

3)在applicationContext.xml中bean節點的屬性destroy-method中指定方法

(執行順序為:@PreDestroy -> destroy -> destroy-method)


BeanFactoryPostProcessor只有一個方法postProcessBeanFactory。是在spring載入完BeanDefinition之後最先執行的,也是bean生命周期中最早執行的,通過實現它可以在初期修改BeanDefinition。

實現之後在spring配置文件中註冊一下就可以生效了。

spring自帶的實現類有PropertyPlaceholderConfigurer等。


BeanPostProcessor有兩個方法:postProcessBeforeInitialization和

postProcessAfterInitialization,分別是在bean初始化之前和之後執行的。


InstantiationAwareBeanPostProcessor是BeanPostProcessor的子介面,調用時機為:

1)實例化Bean之前調用postProcessBeforeInstantiation

2)bean注入屬性後調用postProcessPropertyValues

3)實例化Bean之後調用postProcessAfterInstantiation方法


BeanFactory,以Factory結尾,是一個工廠類(介面)。BeanFactory是spring的核心容器,它的職責包括:實例化、初始化bean,管理bean之間的依賴關係等。

FactoryBean是一種特殊的bean,通常用來創建複雜的bean。返回的實例是getObject方法返回的實例。如

mybatis的SqlSessionFactoryBean和spring-aop中的ProxyFactoryBean就是FactoryBean的實現。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 明哥JAVA指南 的精彩文章:

TAG:明哥JAVA指南 |