BeanPostProcessor——执行时机

BeanPostProcessor就是在执行初始化方法的前后进行一次后置处理。

// AbstractAutowireCapableBeanFactory
    protected Object initializeBean(String beanName, Object bean, @Nullable RootBeanDefinition mbd) {
        // ...
        Object wrappedBean = bean;
        if (mbd == null || !mbd.isSynthetic()) {
            wrappedBean = this.applyBeanPostProcessorsBeforeInitialization(bean, beanName);
        }

        try {
            this.invokeInitMethods(beanName, wrappedBean, mbd);
        } // ...

        if (mbd == null || !mbd.isSynthetic()) {
            wrappedBean = this.applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName);
        }

        return wrappedBean;
    }

遍历所有BeanPostProcessor,每个BeanPostProcessor挨个处理传入的Bean

	@Override
	public Object applyBeanPostProcessorsBeforeInitialization(Object existingBean, String beanName)throws BeansException {
		Object result = existingBean;
		for (BeanPostProcessor processor : getBeanPostProcessors()) {
			Object current = processor.postProcessBeforeInitialization(result, beanName);
			if (current == null) {
				return result;
			}
			result = current;
		}
		return result;
	}

	@Override
	public Object applyBeanPostProcessorsAfterInitialization(Object existingBean, String beanName)throws BeansException {
		Object result = existingBean;
		for (BeanPostProcessor processor : getBeanPostProcessors()) {
			Object current = processor.postProcessAfterInitialization(result, beanName);
			if (current == null) {
				return result;
			}
			result = current;
		}
		return result;
	}

BeanPostProcessor,是Spring的核心,好多Spring的特性都是通过它实现的

BeanPostProcessor

posted @ 2020-11-16 08:48  qianbuhan  阅读(261)  评论(0)    收藏  举报