spring源码学习(六)注册beanPostProcessor与消息资源初始化

1、注册beanPostProcessor

  这个方法的处理逻辑与invokeBeanFactoryPostProcessors里的注册处理逻辑一致

  1)、先从容器中获取获取所以bppName的集合

  String[] postProcessorNames = beanFactory.getBeanNamesForType(BeanPostProcessor.class, true, false);

  2)、在根据priorityOrdered、ordered、nonOrdered以及internal的方式分类排序进行注册

    internalPostProcessors这个分类主要是针对的MergedBeanDefinitionPostProcessor,而这个beanPostProcessor的作用主要是在bean实例化完成之后去修改bean的定义信息,包括AutowiredAnnotationBeanPostProcessor(解析@Autowired、@Value)CommonAnnotationBeanPostProcessor(解析@PostStruct、@PreDestory、@Resource)都可以修改beanDefinition

  3)、这里在统计beanPostProcessor的时候为什么要加1,加1的目的就是为了后面紧接着添加的beanPostProcessor

  4)、在方法的结束为什么又要重新添加一次ApplicationListenerDetector。第一次在prepareBeanFactory的添加,第二次在注册beanPostProcessor的时候添加

    ApplicationListenerDetector的目的是为了记录beanfactory中单例对象,在prepareBeanFactory中提前添加的目的是因为在注册beanPostProcessor之前会实例化一些bean,方便记录单例信息

    第二次添加在所以的beanPostProcessor的最后位置,也是为了最后执行,方便记录信息

 

 

 

2、消息资源初始化initMessageSource

  这个方法在纯spring中几乎没什么作用,在springMVC器重要作用,而这个方法的目的是支持消息的参数化和国际化

  initMessageSource内部执行也很简单

  1)、判断beanFactory中是否messageSource这个bean,如果存在再判断是否有父容器,如果没有父 MessageSource,则仅将父上下文设置为父 MessageSource

  2)、如果不存在就创建一个DelegatingMessageSource消息类放到容器中

 

posted @ 2022-07-12 23:57  搬砖党路过  阅读(148)  评论(0编辑  收藏  举报