spring 受管理bean初始化流程

1.初始化流程--

紅色標註的是spring相關的後處理器,在bean實例化過程的不一樣時機調用相關的後處理接口spring

bean初始化大概分爲5步:緩存

   --------執行InstantiationAwareBeanPostProcessor-postProcessBeforeInstantiation(Class<?> beanClass, String beanName)
1.執行構造方法
   --------執行MergedBeanDefinitionPostProcessor-postProcessMergedBeanDefinition(RootBeanDefinition mbd, Class<?> beanType, String beanName)
   --------執行InstantiationAwareBeanPostProcessor-postProcessAfterInstantiation(Object bean, String beanName)
   --------執行InstantiationAwareBeanPostProcessor-postProcessPropertyValues
2.執行set 方法(或者是屬性註解)
3.執行生命週期Aware接口方法,注入須要的對象
  ---------執行BeanPostProcessor-postProcessBeforeInitialization(Object bean, String beanName)
4.執行afterPropertiesSet
5.執行自定義的init-method方法
  ---------執行BeanPostProcessor-postProcessAfterInitialization(Object bean, String beanName)post

2.spring的後處理回調接口

1.InstantiationAwareBeanPostProcessor--postProcessBeforeInstantiation實例化以前(構造方法執行以前)調用spa

做用:傳入要實例化的對象的class,能夠替換(偷樑換柱)成其餘的class,好比一個代理的class代理

2.MergedBeanDefinitionPostProcessor--postProcessMergedBeanDefinition 構造方法調用以後執行對象

做用:合併class定義接口

使用場景:spring用來緩存屬性註解信息,好比緩存屬性註解信息@Autoware @Resouce 等,實現類 AutowiredAnnotationBeanPostProcessor生命週期

3.InstantiationAwareBeanPostProcessor-postProcessPropertyValues 設置屬性值時調用it

做用:對屬性信息進行一些處理io

使用場景:spring在第二個後處理時緩存了屬性註解信息,這裏就經過緩存取出註解信息,而後將對應的屬性注入進去.實現類AutowiredAnnotationBeanPostProcessor

 

4.BeanPostProcessor--postProcessAfterInitialization對象已經實例化完(包括構造方法,屬性注入,初始方法等)

做用:對象實例完成之後的後處理

場景:spring aop自動代理,用的就是postProcessAfterInitialization後處理 實現類AnnotationAwareAspectJAutoProxyCreator,經過這個回調,將實例化的對象產生一個代理對象返回

相關文章
相關標籤/搜索