19-Spring源码解析之Bean的生命周期(4)——initializeBean

本文深入剖析Spring中Bean的初始化过程,详细解释了initializeBean方法的四个关键步骤:激活初始化方法、应用初始化回调、调用自定义init-method以及执行初始化处理器。通过实例展示了如何利用接口和BeanPostProcessor扩展Spring的功能。
摘要由CSDN通过智能技术生成

Spring版本:<version>5.2.1.RELEASE</version>

上一篇:18-Spring源码解析之Bean的生命周期(3)——【doCreateBean】和【createBeanInstance】

上一篇我们讲解了doCreateBean方法来创建Bean实例,它首先调用createBeanInstance方法来实例化Bean,其次处理依赖问题,接着对该Bean进行属性赋值(populateBean)方法,再接着对Bean进行初始化工作(initializeBean),本篇文章就看一下Spring是如何帮我们完成Bean的初始化的。

一、initializeBean

还记得在实体类中我们通过实现InitializingBean接口后需要重写afterPropertiesSet方法吗?这个方法的执行时机就是在Bean属性赋值(populateBean)后调用initiali在这里插入代码片zeBean指定的方法来根据用户业务进行相应的实例化。

	protected Object initializeBean(final String beanName, final Object bean, @Nullable RootBeanDefinition mbd) {
   
		if (System.getSecurityManager() != null) {
   
			AccessController.doPrivileged((PrivilegedAction<Object>) () -> {
   
				invokeAwareMethods(beanName, bean);
				return null;
			}, getAccessControlContext());
		}
		else {
   
//-------------------------------------------------【功能一】--二、 详细介绍----------------------------------------------		
			// 激活Aware方法
			invokeAwareMethods(beanName, bean);
		}

		Object wrappedBean = bean;
		if (mbd == null || !mbd.isSynthetic()) {
   
		
//-------------------------------------------------【功能二】--三、 详细介绍----------------------------------------------		
			// 应用后处理器
			wrappedBean = applyBeanPostProcessorsBeforeInitialization(wrappedBean, beanName);
		}

		try {
   
//-------------------------------------------------【功能三】--四、 详细介绍----------------------------------------------			
			// 激活用户自定义的initMethod或者afterPropertiesSet方法
			invokeInitMethods(beanName, wrappedBean, mbd);
		}
		catch (Throwable ex) {
   
			throw new BeanCreationException(
					(mbd != null ? mbd.getResourceDescription() : null),
					beanName, "Invocation of init method failed", ex);
		}
		if (mbd == null || !mbd.isSynthetic
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值