Spring初始化知识点
2018-01-07 本文已影响0人
nanyang_lf
- 几个
ApplicationContext
中默认存在的单例Bean
:systemEnvironment:System.getEnv()
、systemProperties:System.getProperties()
、environment
、messageSource
、applicationEventMulticaster
- 文件路径的配置中可以使用{key}表达式,其它默认可以使用的
key
为前系统System.getProperties()
和System.getEnv()
的所有key
,当然也可以自己提前使用System.setProperty()
函数添加想要的key value
。也可以建立一个名称为spring.properties
的文件,从而都可以使其被解析出来。注意:System.getEnv()
返回的map
是不能修改的。- 使用
FileSystemXmlApplicationContext
时,路径如果以/
开始表示相对当前目录,如果要从根路径开始则应该写成//
。- 默认的
bean
命名规则为:
- 如果类名前两个字母都为大写则生成的名称为类名 e.g ABb => ABb
- 如果只有第一个字母为大写则生成的名称首字母小写 e.g Abb => abb
- 如果是使用
cglib
生成的类形则$$后面的部分都将被省去,即以原类为准 e.g A$$B => a- 如果是内部类$将会被替换成
.
且第一个字母大写 e.g A$B => a.Brefresh()->postProcessBeanFactory(beanFactory)
在版本4的时候还是空实现。BeanPostProcessor
在spring
中被添加的顺序为:
- 在
prepareBeanFactory
中ApplicationContextAwareProcessor
->ApplicationListenerDetector
然后看情况可能会添加LoadTimeWeaverAwareProcessor
.- 在
registerBeanPostProcessors
中BeanPostProcessorChecker
->实现了PriorityOrdered
的BeanPostProcessor
->实现了Ordered
的BeanPostProcessor
->系统中自己定义的普通的BeanPostProcessor
->实现了MergedBeanDefinitionPostProcessor
->ApplicationListenerDetector
.BeanFactoryPostProcessor
:先BeanDefinitionRegistryPostProcessor
然后是普通的BeanFactoryPostProcessor
Bean
的生命周期BeanFactoryPostProcessor
->[BeanNameAware
->BeanClassLoaderAware
->BeanFactoryAware
->BeanPostProcessor.postProcessorBeforeInitialization
->ApplicationListener
->InitializingBean
->init-method
->SmartInitializingSingleton
->BeanPostProcessor.postProcessorAfterInitialization
]. 注意:[]里面的是Bean在初始化时的操作,前面三个Aware
都是写在了BeanPostProcessor
之前,但是ApplicationContextAware
是在ApplicationContextAwareProcessor
(BeanPostProcessor
)中调用的,所以BeanNameAware
,BeanFactoryAware
在ApplicationContextAware
之前,且除去优先级高的BeanPostProcessor
,ApplicationContextAwareProcessor
排在第一个,可以参考上面BeanPostProcessor
的添加顺序.