12-bean创建流程3

1 bean实例化前

createBean方法里面的resolveBeforeInstantiation方法,InstantiationAwareBeanPostProcessor接口创建一个代理对象返回

try {
	// Give BeanPostProcessors a chance to return a proxy instead of the target bean instance.
	Object bean = resolveBeforeInstantiation(beanName, mbdToUse);
	if (bean != null) {
		return bean;
	}
}
/**
 * Apply before-instantiation post-processors, resolving whether there is a
 * before-instantiation shortcut for the specified bean.
 * @param beanName the name of the bean
 * @param mbd the bean definition for the bean
 * @return the shortcut-determined bean instance, or {@code null} if none
 */
@Nullable
protected Object resolveBeforeInstantiation(String beanName, RootBeanDefinition mbd) {
	Object bean = null;
	if (!Boolean.FALSE.equals(mbd.beforeInstantiationResolved)) {
		// Make sure bean class is actually resolved at this point.
		if (!mbd.isSynthetic() && hasInstantiationAwareBeanPostProcessors()) {
			Class<?> targetType = determineTargetType(beanName, mbd);
			if (targetType != null) {
				bean = applyBeanPostProcessorsBeforeInstantiation(targetType, beanName);
				if (bean != null) {
					bean = applyBeanPostProcessorsAfterInitialization(bean, beanName);
				}
			}
		}
		mbd.beforeInstantiationResolved = (bean != null);
	}
	return bean;
}

2. bean实例化doCreateBean()

spring创建bean的方式有哪几种
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于Spring Bean的创建流程,我可以简单地给您介绍一下。 1. Spring容器读取Bean的定义,解析XML配置文件或者注解,获取Bean的信息。 2. Spring容器根据Bean的定义使用Java反射机制创建Bean实例。 3. Spring容器将Bean的属性值和其他Bean的引用注入到Bean实例中。 4. 如果Bean实现了BeanNameAware和BeanFactoryAware接口,Spring容器将Bean的ID和BeanFactory实例注入到Bean中。 5. 如果Bean实现了ApplicationContextAware接口,Spring容器将ApplicationContext实例注入到Bean中。 6. 如果Bean实现了BeanPostProcessor接口,Spring容器将调用BeanPostProcessor的postProcessBeforeInitialization方法对Bean进行预处理。 7. 如果Bean实现了InitializingBean接口,Spring容器将调用其afterPropertiesSet方法进行初始化。 8. 如果Bean在配置文件中使用了init-method属性或者使用了@PostConstruct注解,Spring容器将调用指定的初始化方法进行初始化。 9. 如果Bean实现了BeanPostProcessor接口,Spring容器将调用BeanPostProcessor的postProcessAfterInitialization方法对Bean进行后处理。 10. 当需要将Bean从容器中移除时,如果Bean实现了DisposableBean接口,Spring容器将调用其destroy方法进行销毁。 11. 如果Bean在配置文件中使用了destroy-method属性或者使用了@PreDestroy注解,Spring容器将调用指定的销毁方法进行销毁。 以上就是Spring Bean的创建流程,希望能对您有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值