Skip to content

Latest commit

 

History

History
94 lines (94 loc) · 5.08 KB

学习流程.md

File metadata and controls

94 lines (94 loc) · 5.08 KB

1、了解 Spring 整体的 IOC 流程 1) BeanNameGenerator 类 ,生成 bean 的 name 2) BeanDefinition 和 BeanDefinitionHolder 的关系 a、 BeanDefinition 是 Bean 的定义信息 b、 BeanDefinitionHolder 是一个封装类,包含了 beanDefinition、beanName、aliases 的封装类 3) xml 配置的 bean,都是 GenericBeanDefinition 和 RootBeanDefinition 类型的 4) 注解配置的 bean,都是 ScannedGenericBeanDefinition 类型的 `` 5) 了解 BeanFactory、DefaultListableBeanFactory、ConfigurableListableBeanFactory、BeanDefinitionRegistry 6) 了解 AbstractApplicationContext 的 refresh() 方法 7) 当配置了 component-scan 注解,spring 会自动注入一个 internal 开头的 bean,主要看 AnnotationConfigUtils 2、了解 AbstractApplicationContext 的 refresh() 方法的大致流程 1) prepareRefresh() 2) obtainFreshBeanFactory() 3) prepareBeanFactory() 4) postProcessBeanFactory() 5) invokeBeanFactoryPostProcessors() 6) 7) 8) 9) 10) 11) 12) 3、细看 ClassPathXmlApplicationContext 的构造方法 4、细看 prepareRefresh() 方法 1) 设置启动时间 startupDate 2) 设置激活标志 active 3) 设置关闭 closed 4) 5、细看 obtainFreshBeanFactory() 方法 6、细看 prepareBeanFactory() 方法 7、postProcessBeanFactory() 方法是用来扩展的 8、细看 invokeBeanFactoryPostProcessors() 方法 1) 熟练掌握两个类 a、BeanDefinitionRegistryPostProcessor 这个类是对 BeanDefinition 进行操作的,具有增删改的功能 b、BeanFactoryPostProcessor 这个类是对BeanFactory 进行操作的,可以操作内部的所有东西,可以对 BeanDefinition 进行修改操作 2) 熟练掌握其执行过程 3) 如果方法入参 beanFactoryPostProcessors 是 BeanDefinitionRegistryPostProcessor 的子类,那么走以下的执行逻辑: a、执行外部加入的 BeanDefinitionRegistryPostProcessor(比如:重写 customizeBeanFactory() 方法,调用 addBeanFactoryPostProcessor() 方法加入) i、PriorityOrdered ii、Ordered iii、没有继承 PriorityOrdered 和 Ordered b、执行spring容器内部的 BeanDefinitionRegistryPostProcessor(比如:自定义了部分实现 BeanDefinitionRegistryPostProcessor 的类,然后通过注解或者xml配置,交给spring管理) i、PriorityOrdered ii、Ordered iii、没有继承 PriorityOrdered 和 Ordered c、执行 spring 容器中自己定义的一些 BeanDefinitionRegistryPostProcessor i、PriorityOrdered ii、Ordered iii、没有继承 PriorityOrdered 和 Ordered d、上面所有的 BeanDefinitionRegistryPostProcessor 都是继承了 BeanFactoryPostProcessor 的,所以需要执行 postProcessBeanFactory() 方法 4) 如果方法入参 beanFactoryPostProcessors 是 BeanFactoryPostProcessor 的子类,那么走以下的执行逻辑: a、执行外部加入的 BeanFactoryPostProcessor(比如:重写 customizeBeanFactory() 方法,调用 addBeanFactoryPostProcessor() 方法加入) i、PriorityOrdered ii、Ordered iii、没有继承 PriorityOrdered 和 Ordered 5) 执行spring容器内部的 BeanDefinitionRegistryPostProcessor(不用区分是自定义的,还是 spring 容器自己定义的) a、执行 BeanFactoryPostProcessor i、PriorityOrdered ii、Ordered iii、没有继承 PriorityOrdered 和 Ordered 6) 掌握 ConfigurationClassPostProcessor 这个类的 postProcessBeanDefinitionRegistry() 方法 7) 扩展了解下 SpringBoot 的自动装配原理 8) 熟练掌握 ConfigurationClassPostProcessor(这里主要就是解析 @Configuration @Component @ComponentScan @Import @ImportResource @Bean) 9) ConfigurationClassPostProcessor 的 postProcessBeanFactory() 方法 9、细看 registerBeanPostProcessors() 方法 1) InstantiationAwareBeanPostProcessor 2) SmartInstantiationAwareBeanPostProcessor 3) MergedBeanDefinitionPostProcessor 4) DestructionAwareBeanPostProcessor 10、大致看 initMessageSource() 方法 11、细看 initApplicationEventMulticaster() 方法和 registerListeners() 方法 1) 主要了解下观察者模式 2) 了解事件、监听器、广播器、事件源 12、了解 onRefresh() 是扩展方法,在 springMvc 里细看 13、细看 finishBeanFactoryInitialization() 方法 1) 为上下文初始化类型转换器 a、Converter 一对一转换 b、GenericConverter 一对多转换 c、ConverterFactory 多对多转换 2) 掌握 FactoryBean,以及与 BeanFactory 的区别 3) 对象的创建方式 a、new b、反射 c、通过 beanPostProcessor(InstantiationAwareBeanPostProcessor) 来创建代理对象 d、factoryMethod e、supplier f、FactoryBean 4) autowired 的装配方式 a、byName b、byType c、constructor d、default e、no