天天看點

spring加載bean的流程

BeanPostProcessor和BeanFactoryPostProcessor的差別

這兩個都是後處理bean的接口

  1. BeanPostProcessor:後置處理bean,它是bean級别的,可以在springbean的

    初始化前後

    對bean進行增強。使用時直接實作這個接口,然後加到ioc容器中即可。
    spring加載bean的流程
  2. BeanFactoryPostProcessor:他可以對springbean的對beanDefinition進行修改等相關操作,比如可以将beanname為aa指向A對象改為指向B對象。
    spring加載bean的流程

javabean和springbean的差別

  1. javabean(java對象):使用new或者其他方式直接建立,由jvm統一管理。一個java對象就隻有類中定義的屬性和方法。
  2. springbean:通過反射建立、由Spring容器統一管理。除了擁有類中的屬性和方法之外還有spring給他增加或者修改的屬性和方法。

springbean的加載流程

  1. 首先、java類通過類加載器加載成位元組碼檔案也就是Class對象
  2. 然後根據bean的位元組碼檔案生成一個BeanDefinition(beanDefinition被稱為bean的定義類、這個類裡面放了bean的類資訊和類的其他配置資訊)
  3. 生成beanDefinition後會放到一個beanDefinitionMap裡面
  4. 然後會将beanDefinitionMap裡面的所有beanDefiinition周遊檢查一遍、周遊之前會執行BeanFactoryPostProcessor對beanDefinition進行修改等相關操作,再判斷類名等配置資訊是否合法
  5. 檢查完之後符合要求的他就會去建立這個對象了、建立對象時會執行BeanPostProcessor方法,進行屬性注入、初始化方法、AOP處理等等。
  6. 建立完之後就會放到一個叫singletonObjects中
spring加載bean的流程