spring源碼07——AbstractAutowireCapableBeanFactory.initializeBean

類名:AbstractAutowireCapableBeanFactory#initializeBean

 protected Object initializeBean(final String beanName, final Object bean, RootBeanDefinition mbd) {
        if (System.getSecurityManager() != null) {
            AccessController.doPrivileged(new PrivilegedAction<Object>() {
                public Object run() {
                    AbstractAutowireCapableBeanFactory.this.invokeAwareMethods(beanName, bean);
                    return null;
                }
            }, this.getAccessControlContext());
        } else {
		//處理Aware接口的回調
            this.invokeAwareMethods(beanName, bean);
        }

        Object wrappedBean = bean;
        if (mbd == null || !mbd.isSynthetic()) {
		//後置處理器的調用
            wrappedBean = this.applyBeanPostProcessorsBeforeInitialization(bean, beanName);
        }

        try {
		//調用自定義的初始化方法
            this.invokeInitMethods(beanName, wrappedBean, mbd);
        } catch (Throwable var6) {
            throw new BeanCreationException(mbd != null ? mbd.getResourceDescription() : null, beanName, "Invocation of init method failed", var6);
        }

        if (mbd == null || !mbd.isSynthetic()) {
		////後置處理器的調用
            wrappedBean = this.applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName);
        }
		//返回創建好的Bean
        return wrappedBean;
    }

1、this.invokeAwareMethods(beanName, bean);

處理Aware接口的回調

2、 wrappedBean = this.applyBeanPostProcessorsBeforeInitialization(bean, beanName);

後置處理器的調用

3、 this.invokeInitMethods(beanName, wrappedBean, mbd);

調用自定義的初始化方法

4、wrappedBean = this.applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName);

後置處理器的調用
spring源碼09——AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization

5、return wrappedBean;

返回創建好的Bean:
如果如下方法調用過來的:AbstractApplicationContext.registerBeanPostProcessors()
此時創建的bean是擴展了BeanPostProcessor的bean,比如:AbstractAutoProxyCreator

如果是從如下方法調用過來的:
AbstractApplicationContext.finishBeanFactoryInitialization
測試創建的bean就是我們常用的bean。

AbstractAutoProxyCreator實現了BeanPostProcessor接口。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章