- 几个
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
的添加顺序.
Spring初始化知识点
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...