nh网站建设,团购网站模板 免费,北京公司摇号政策,广州搜域网络提供专业的网站建设Spring的启动流程概述#xff1a;
核心方法#xff1a;
refresh方法#xff0c;作用就是实例化spring容器中的所有单例。 3步#xff1a;
生成BeanFactory容器#xff08;有beanDefinition类信息和bean对象实例#xff09;生成BeanDefinition类信息生成bean对象实例 需…Spring的启动流程概述
核心方法
refresh方法作用就是实例化spring容器中的所有单例。 3步
生成BeanFactory容器有beanDefinition类信息和bean对象实例生成BeanDefinition类信息生成bean对象实例 需要知道的知识
1、先有beanDefinition类信息再有bean对象。
2、在beanDefinition和bean前后spring有增加拓展点拓展点统一用PostProcessor封装。所以流程是
生成BeanFactory容器beanDefinitionPostProcessor处理、生成BeanDefinition类信息、beanDefinitionPostProcessor处理beanPostProcessor处理、生成bean对象实例、beanDefinitionPostProcessor处理 Spring的启动流程具体一点
1、生成BeanFactory容器。即ApplicationContex、AnnotationConfigApplicationContex
创建BeanFactory然后往BeanFactory中丢入基础的PostProcessor处理器的BeanDefinition。
核心是生成PostProcessor的BeanDefinition。这里的PostProcessor处理器主要是BeanDefinition和Bean的PostProcessor处理器如BeanDefinitionRegistryPostProcessor、ConfigurationClassPostProcessor、EventListenerMethodProcessor等主要涉及beanDefinition注册、autowired自动注入、aware回调、eventListener事件监听有关的。
2、生成BeanDefinition类信息
调用上面放入的BeanFactoryPostProcessor处理器的方法走方法逻辑从而得到更多的BeanDefinition。
如调用ConfigurationClassPostProcessor这种beanDefinition注册有关的处理器的方法就会描相应目录下的component等生成BeanDefinition、解析ImportBean生成BeanDefinition等。
生成国际化messageSource、事件发布applicationEventMulticaster的BeanDefinition
3、生成bean对象实例单例bean
创建对象过程是实例化1-3、处理属性5-7、初始化8-10。涉及到之前加入的Bean的PostProcessor的beanBefinition的处理 1.实例化前。InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation() 2.实例化 3.实例化后。MergedBeanDefinitionPostProcessor.postProcessMergedBeanDefinition() 4.InstantiationAwareBeanPostProcessor.postProcessAfterInstantiation() 5.自动注入依赖注入 6.属性处理。InstantiationAwareBeanPostProcessor.postProcessProperties()。如autowired 7.回调处理一些类信息。Aware对象 8.初始化前。BeanPostProcessor.postProcessBeforeInitialization() 9.初始化。执行InitializingBean初始化接口 10.初始化后。BeanPostProcessor.postProcessAfterInitialization()。如aop 配置类解析流程
会给个初始Component一般是AppConfig.class到ApplicationContex中作为入口。对Component的处理逻辑如下
1、Component的bean就会生成beanDefinition上交spring容器含Controller、Service、repository、configuration这些都是Component如果里面有内部类也有Component则递归。
2、如果有ComponentScan则扫描获取Component并生成beanDefinition上交spring容器
3、如果有Import、Bean等都生成beanDefinition上交spring容器 Import、Configuration、Bean区别
1、Configuration是Component自己项目的spring都读取到。Import和Bean不是Component所以自己项目的spring读取不到所以需和Configuration一起用这样spring就能读到Component进而读到Import和Bean走Import和Bean的逻辑。
2、当然Import和Bean也可以和Component一起用但是Configuration本身就是Component用Configuration有一种标识作用让人一看就知道这是个导入外部类的配置类就和Controller一样让人一看就知道这个是controller层。
3、ImportUserConfig.class和Bean都是导入外部beanImport侧重于导入一个配置类这个配置类一般是个大入口里有多个bean多个bean会注册到spring中Import打在类上Bean侧重于导入单个beanBean打在方法上。