Spring初始化知识点

  • 几个ApplicationContext中默认存在的单例Bean:systemEnvironment:System.getEnv()systemProperties:System.getProperties()environmentmessageSourceapplicationEventMulticaster
  • 文件路径的配置中可以使用{key}表达式,其它默认可以使用的key为前系统System.getProperties()System.getEnv()的所有key,当然也可以自己提前使用System.setProperty()函数添加想要的key value。也可以建立一个名称为spring.properties的文件,从而都可以使其被解析出来。注意:System.getEnv()返回的map是不能修改的。
  • 使用FileSystemXmlApplicationContext时,路径如果以/开始表示相对当前目录,如果要从根路径开始则应该写成//
  • 默认的bean命名规则为:
    1. 如果类名前两个字母都为大写则生成的名称为类名 e.g ABb => ABb
    2. 如果只有第一个字母为大写则生成的名称首字母小写 e.g Abb => abb
    3. 如果是使用cglib生成的类形则$$后面的部分都将被省去,即以原类为准 e.g A$$B => a
    4. 如果是内部类$将会被替换成.且第一个字母大写 e.g A$B => a.B
  • refresh()->postProcessBeanFactory(beanFactory)在版本4的时候还是空实现。
  • BeanPostProcessorspring中被添加的顺序为:
    1. prepareBeanFactoryApplicationContextAwareProcessor->ApplicationListenerDetector然后看情况可能会添加LoadTimeWeaverAwareProcessor .
    2. registerBeanPostProcessorsBeanPostProcessorChecker->实现了PriorityOrderedBeanPostProcessor->实现了OrderedBeanPostProcessor->系统中自己定义的普通的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,BeanFactoryAwareApplicationContextAware之前,且除去优先级高的BeanPostProcessor,ApplicationContextAwareProcessor排在第一个,可以参考上面BeanPostProcessor的添加顺序.

你可能感兴趣的:(Spring初始化知识点)