Spring不僅提供了一個進行快速開發的基礎框架,而且還提供了很多可擴展的接口,用於滿足一些額外的開發需求,本篇將對常用的可擴展接口進行歸納總結。
1.InitializingBean接口
InitializingBean接口中只有一個afterPropertiesSet方法,從方法的名稱上很容易理解,這個方法是在Bean的屬性都設置值後被調用,用於完成一些初始化工作。當然,在Spring的配置文件中init-method的配置也是在Bean的屬性都設置值後被調用,用於完成一些初始化工作,不過在執行順序上,接口的方法先於配置。值得注意的是,這兩種方式都是用於完成一些初始化工作,所以相應的方法中不要編寫一些複雜且執行時間很長的邏輯。
2.DisposableBean接口
DisposableBean接口中只有一個destroy方法,該方法會在Bean被銷燬、生命週期結束之前被調用,用於做一些銷燬的收尾工作。同樣,在Spring的配置文件中destroy-method配置也完成同樣的工作,不過在執行順序上,接口的方法先於配置。
3.ApplicationContextAware接口
ApplicationContextAware中只有一個setApplicationContext方法。實現了ApplicationContextAware接口的類,可以在該Bean被加載的過程中獲取Spring的應用上下文ApplicationContext,通過ApplicationContext可以獲取Spring容器內的很多信息。
4.BeanFactoryAware接口
BeanFactoryAware接口中只有一個setBeanFactory方法。實現了BeanFactoryAware接口的類,可以在該Bean被加載的過程中獲取加載該Bean的BeanFactory,同時也可以獲取這個BeanFactory中加載的其它Bean。
5.FactoryBean接口
FactoryBean接口可以實現Bean實例化的個性定製,讓Spring容器加載我們想要的Bean。實現了FactoryBean接口的類,可以通過實現getObject方法,實現加載我們想要的Bean。
6.BeanPostProcessor接口
BeanPostProcessor接口中有兩個方法,分別爲postProcessBeforeInitialization和postProcessAfterInitialization。實現了BeanPostProcessor接口的類,會在每個Bean初始化(即調用setter)之前和之後,分別調用這個類中的postProcessBeforeInitialization方法和postProcessAfterInitialization方法,實現初始化的邏輯控制。
7.InstantiationAwareBeanPostProcessor接口
InstantiationAwareBeanPostProcessor接口中,常用的方法是postProcessBeforeInstantiation和postProcessAfterInstantiation。每個Bean的實例化(即調用構造函數)之前和之後,會分別調用實現了該接口的類中的postProcessBeforeInstantiation和postProcessAfterInstantiation方法。
8.BeanFactoryPostProcessor接口
BeanFactoryPostProcessor接口中只有postProcessBeanFactory方法。實現了該接口的類,可以在Bean被創建之前,獲取容器中Bean的定義信息,並且可以進行修改。實現類中的postProcessBeanFactory方法只會被執行一次,且先於BeanPostProcessor接口的方法。