zoukankan      html  css  js  c++  java
  • Bean后置处理器

    代码片段:

    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory#populateBean

    if (!mbd.isSynthetic() && hasInstantiationAwareBeanPostProcessors()) {
        for (BeanPostProcessor bp : getBeanPostProcessors()) {
            if (bp instanceof InstantiationAwareBeanPostProcessor) {
                InstantiationAwareBeanPostProcessor ibp = (InstantiationAwareBeanPostProcessor) bp;
                //如果返回为 false, 则会终止属性注入
                if (!ibp.postProcessAfterInstantiation(bw.getWrappedInstance(), beanName)) {
                    return;
                }
            }
        }
    }

    需要注意一个问题, 如果返回值是 false , 那么此处就回结束属性注入方法: populateBean

    这里遍历了容器中的后置处理器, 然后调用满足条件的 postProcessAfterInstantiation() 方法.

    boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException

    通过调试, 很明了的能发现, 有三个后置处理器能满足条件, 调用先后顺序为:

    1.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor

    2.CommonAnnotationBeanPostProcessor

    3.AutowiredAnnotationBeanPostProcessor

    根据前面调用的 InstantiationAwareBeanPostProcessor 后置处理器, 大致可以推断, 这里估计啥也不会干.

    因为 spring 的流程还没走完呢, 怎么能终止呢!

    ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor

    这里是由其父类来完成的: 

    org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessorAdapter#postProcessAfterInstantiation

    @Override
    public boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {
        return true;
    }

    啥也没干

    CommonAnnotationBeanPostProcessor

    @Override
    public boolean postProcessAfterInstantiation(Object bean, String beanName) {
        return true;
    }

    啥也没干

    AutowiredAnnotationBeanPostProcessor

    由其父类完成:

    org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessorAdapter

    @Override
    public boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {
        return true;
    }

    如我所想, 这里啥也没干, 之所以这么留着, 我估计是spring扩展用的

  • 相关阅读:
    textRNN & textCNN的网络结构与代码实现!
    四步理解GloVe!(附代码实现)
    NLP系列文章:子词嵌入(fastText)的理解!(附代码)
    自然语言处理(NLP)的一般处理流程!
    强化学习(Reinforcement Learning)中的Q-Learning、DQN,面试看这篇就够了!
    迁移学习(Transfer),面试看这些就够了!(附代码)
    白话--长短期记忆(LSTM)的几个步骤,附代码!
    三步理解--门控循环单元(GRU),TensorFlow实现
    Django框架1——视图和URL配置
    os模块
  • 原文地址:https://www.cnblogs.com/elvinle/p/13384114.html
Copyright © 2011-2022 走看看