Spring處理器和Bean的生命周期
Spring處理器是對Bean對象的的開發可以對BeanDifinition進行操作,例如動態添加、修改BeanDefinition、動態修改Bean。,也可以在Bean對象創建后對Bean對象進行代理增強。
注意:對于處理器要又一個正確的認知,必須要對Bean生命周期有一個良好的認知。
兩種處理器
Bean工廠后處理器
實現方式:將BeanFactoryPostProcessor交給Spring容器管理,實現BeanFactoryPostProcessor接口,實現postProcessBeanFactory方法。
xml配置
運行結果
案例1:修改BeanDifinition對象達成貍貓換太子的效果
Bean工產后處理器類
運行結果
案例2:增加BeanDifinition對象,實現了動態注冊。
Bean工廠后處理器類
測試和結果
Bean后處理器
在bean創建后對生效,可以對Bean進行是對象創建之后,緩存到singletonObjects單例池之前,對Bean初始化過程的操作,包括屬性的填充,初始化方法的執行等。二次加工如動態代理。
實現方式通過實現 BeanPostProcessor接口,實現其postProcessBeforeInitialization(在 Bean 初始化之前調用()和postProcessAfterInitialization(在 Bean 初始化之后調用)方法,
實現案例:對Bean對象的代理增強
實現BeanPostProcessor
Springxml文件配置
測試結果
Bean對象的生命周期
即:Bean對象實例化之后(反射創建出對象),到bean成為一個完整對象,最終存到singletonobjects中的過程。最終分為三個階段。
Bean實例化階段:Spring框架會取出BeanDefintion的信息進行判斷當前Bean范圍是否是延遲加載。是否FactoryBean等,在將BeanDefintion存放到BeanDefintionMap后,創建Bean對象之前,可以調用Bean工廠后處理器對其進行修改增加等操作。
Bean初始化方法階段,通過對BeanDefintionMap進行遍歷創建Bean對象,此時Bean對象還是個半成品,可以調用Bean后處理器對其進行Aop代理增強,此后還會執行自動義初始化方法inti-method方法等,該階段是最具技術含量和復雜的階段
完成階段:Bean成為了一個完成Spring Bean,被存儲到單例池singleonObjects完成了Spring Bean的整個生命周期。