一、Spring容器有哪些?
- 單例池:是一個concurrentHashMap,key是beanName,value是object
- BeanFactory
- ApplicationContext:是BeanFactory的一種拓展
- AnotationConfigApplicationContext(不可重新整理):以注解方式
- ClassPathXMLApplicationContext(可重新整理):從項目的根路徑開始查找檔案
- FileSystemXMLApplicationContext(可重新整理):從工程的根路徑開始查找檔案
二、建立Bean的方式有哪些?
- 使用xml檔案中的标簽 <bean/>
- 使用注解@Bean
- 使用@Component注解,配合@ComponentScan掃描
- 通過BeanDefinition
- 通過FactoryBean
- 通過Supplier
三、加載流程
- BeanDefinition定義
- 執行個體化前(InstantiationAwareBeanPostProcessor)
- 構造方法判斷:如果構造方法沒有加@Autowired注解,預設找無參;沒有無參就找多個@Autowired(require=false)注解的構造方法,首先找形參最多的,形參數量一緻就按從上到下
- 執行個體化
- 執行個體化後(InstantiationAwareBeanPostProcessor)
- 屬性填充(@Autowired)
- 初始化前(BeanPostProcessor)
- 初始化(InitializingBean):對Bean中的其它屬性指派
- 初始化後(BeanPostProcessor):得到真正的bean對象,AOP就是在這個步驟做的