01-Spring容器初始化
2020-09-30 14:27:12 0 举报
spring-bean容器初始化过程参与的几个核心类
作者其他创作
大纲/内容
1.4 invokeBeanFactoryPostProcessors()
实现
1.10 preInstantiateSingletons()
registerBeanDefinition() //CommponentScan类注册
GenericApplicationContextextends AbstractApplicationContext
1. refresh() -- 1.1 super.obtainFreshBeanFactory() //获取bf并设置refreshed=true -- 1.2super.prepareBeanFactory() //设置beanClassLoader ignoreDepency等 -- 1.3super.postProcessBeanFactory() //空实现(允许其他子类对bf后处理) -- 1.4invokeBeanFactoryPostProcessors() // 对BeanFactoryPostProcessor的注册和回调方法执行 - PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors - 如果发现loadTimeWeaver的Bean 添加BeanPostProcessor->LoadTimeWeaverAwareProcessor -- 1.5registerBeanPostProcessors() //注册bean的后置处理器,使得bean工厂可以干预bean的实例化过程 -- 1.6initMessageSource() -- 1.7initApplicationEventMulticaster() //初始化Application事件的广播器 -- 1.8 onRefresh() //空实现,允许其他子类在refresh之后做一此事情 -- 1.9registerListeners() // 检查并注册监听器 -- 1.10 finishBeanFactoryInitialization() //初始化所有单例Bean、初始化LoadTimeWeaverAware、缓存所有的BeanName、 -- 1.11 finishRefresh()
AbstractBeanFactory
1. getBean() 和 doGetBean() -- transformedBeanName() -- DefaultSingletonBeanRegistry.getSinngleton() //获取单例对象,BeanMap中没有,就反射创建
PostProcessorRegistrationDelegatestatic void invokeBeanFactoryPostProcessors
DefaultListableBeanFactory
1. registerBeanDefinition() -- beanDefinitionMap.put -- beanDefinitionNames.add -- manualSingletonNames.remove2. getBean() -- resolveNamedBean() -- super.getBean()3. preInstantiateSingletons() //初始化所有单例 -- this.getBean
beanDefinitionMapbeanDefinitionNamesmanualSingletonNames
AnnotationConfigApplicationContextextends GenericApplicationContext
1. 构造方法(DefConfig.class) -- super() //实例化DefaultListableBeanFactory -- this() //创建reader和scanner对象 -- register // 调用reader.register注册配置类 -- refresh
AnnotatedBeanDefinitionReader readerClassPathBeanDefinitionScanner scanner
ConfigurableListableBeanFactory
用户自定义
BeanDefinitionRegistry
registerBeanDefinition //putremoveBeanDefinition getBeanDefinition……
refresh()
postProcessBeanDefinitionRegistry()
registerBeanDefinition() //注册配置类等
register()
AnnotatedBeanDefinitionReader
1. registerBean(DefConfig.class) -- AnnotationScopeMetadataResolver.resolveScopeMetadata //作用域 -- BeanNameGenerator.generateBeanName //获取bean名 -- AnnotationConfigUtils.processCommonDefinitionAnnotations // 设置其他属性 -- definitionHolder // 创建dh并为其代理,单例不需要代理 -- BeanDefinitionReaderUtils.registerBeanDefinition //注册bean到beanFactory
继承
DefConfig (自定义配置类)
@Bean goods(){ return new Goods(); }
isAbstract() //是否为抽象类isSingletonisLazygetDescription() //人类可读的描述factoryBeanNamefactoryMethodName beanClass // lazyInit // 懒加载autowireCandidate dependsOn // 依赖哪些beangetRole //角色0默认1大对象2springprimaryqualifiers //getConstructorArgumentValues()getPropertyValues();
ConfigurationClassPostProcessor
1. postProcessBeanDefinitionRegistry() -- ConfigurationClassParser.parse -- ComponentScanAnnotationParser.pase //解析config类 -- ClassPathBeanDefinitionScanner.doScan //扫描包下的bean -- registerBeanDefinition() //注册beanDefinition
MyPostProcessor
1. postProcessBeanDefinitionRegistry() -- 自定义实现,可拿到BeanFactory做一些定制逻辑
Spring启动new AnnotationConfigApplicationContext()
收藏
收藏
0 条评论
下一页