《spring设计思想》14-initializeBean,bean的初始化做了啥

回到代码中,观察initializeBean方法

	/**
	 * Initialize the given bean instance, applying factory callbacks
	 * as well as init methods and bean post processors.
	 * <p>Called from {@link #createBean} for traditionally defined beans,
	 * and from {@link #initializeBean} for existing bean instances.
	 */
	protected Object initializeBean(final String beanName, final Object bean, @Nullable RootBeanDefinition mbd) {
		//调用invokeAwareMethods方法,回调bean实现的aware方法
		invokeAwareMethods(beanName, bean);
		
		Object wrappedBean = bean;
		if (mbd == null || !mbd.isSynthetic()) {
        // 回调BeanPostProcessor的postProcessBeforeInitialization方法
			wrappedBean = applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName);
		}

		try {
        // 调用 bean的 initializingBean的接口方法:afterPropertiesSet:调用自定义的initMethod。
			invokeInitMethods(beanName, wrappedBean, mbd);
		}
		...
//    调用 BeanPostProcessor的 postProcessorAfterInitialization方法
		if (mbd == null || !mbd.isSynthetic()) {
			wrappedBean = applyBeanPostProcessorsAfterInitialization(wrappedBean, beanName);
		}

		return wrappedBean;
	}

方法很简单,思路很清晰:

1-调用 invokeAwareMethods方法,回调bean实现的各种aware接口

2-调用applyBeanPostProcessorsBeforeInitialization,回调beanFactory/applicationContext中已经注入的beanPostProcessor的postProcessBeforeInitialization方法

3-调用invokeInitMethods方法,调用bean实现的InitializingBean的afterPropertiesSet方法。调用xml中自定义的 init方法。

4-调用applyBeanPostProcessorsAfterInitialization,回调beanFactory/applicationContext中已经注入的beanPostProcessor的postProcessAfterInitialization.

首先是调用bean实现的aware接口。代码如下:

先调用BeanNameAware接口,再调用BeanClassLoaderAware接口,最后调用BeanFactoryAware接口。三个方法简单。

BeanPostProcessor的方法调用下节继续

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值